home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 142 / Gekkan Dennou Club - 2000.3 Vol. 142 (Japan).7z / Gekkan Dennou Club - 2000.3 Vol. 142 (Japan) (Track 1).bin / tools / s44play / s44p101s.lzh / core.s < prev    next >
Text File  |  1999-12-19  |  135KB  |  6,274 lines

  1.     .include    fefunc.h
  2.     .include    global.mac
  3.  
  4. ;----------------------------------------------------------------
  5. ;再生コアエントリ
  6. ;<a2.l:パラメータバッファのアドレス
  7. ;<a6.l:base
  8.     .text
  9.     .align    4,$2048
  10. core_entry::
  11.     lea.l    (core,pc),a0
  12.     moveq.l    #-1,d0
  13.     bsr    takeback
  14.     move.l    d0,d7
  15.  
  16.   .if TEST_ABSOLUTE=0
  17.     lea.l    base,a6            ;念のため
  18.   .endif
  19.  
  20.     bsr    super
  21.     move.w    sr,-(sp)
  22.     ori.w    #$0700,sr
  23.  
  24.     move.l    timerd_old_vector,d0
  25.     beq    1f
  26.  
  27.     move.l    d0,TIMERD_VECTOR
  28.     clr.l    timerd_old_vector
  29.  
  30.     move.b    #$00,TCDCR        ;TIMERC,TIMERDカウント停止
  31.  
  32.     bclr.b    #4,IERB            ;TIMERD割り込み禁止,IPRBのbit4もクリアされる
  33.     bclr.b    #4,IMRB            ;TIMERD割り込み禁止
  34.  
  35.     move.b    timerd_old_tcdr,TCDR    ;TIMERCカウンタ復元
  36.     move.b    timerd_old_tddr,TDDR    ;TIMERDカウンタ復元
  37.  
  38.     move.b    timerd_old_tcdcr,TCDCR    ;TIMERC,TIMERDカウント開始
  39.  
  40.     bset.b    #5,IMRB            ;TIMERC割り込み許可
  41.     bset.b    #5,IERB            ;TIMERC割り込み許可
  42.                     ;TIMERCは割り込みを使っていないので,
  43.                     ; ペンディングクリアは不要
  44.  
  45.     tst.b    timerd_old_imrb
  46.     beq    @f
  47.     bset.b    #4,IMRB            ;TIMERD割り込み許可
  48. @@:
  49.     tst.b    timerd_old_ierb
  50.     beq    @f
  51.     bset.b    #4,IERB            ;TIMERD割り込み許可
  52. @@:
  53. 1:
  54.  
  55.     move.l    nmi_old_vector,d0
  56.     beq    @f
  57.     move.l    d0,NMI_VECTOR
  58.     clr.l    nmi_old_vector
  59. @@:
  60.     move.l    poweroff_old_vector,d0
  61.     beq    @f
  62.     move.l    d0,POWEROFF_VECTOR
  63.     clr.l    poweroff_old_vector
  64. @@:
  65.     move.l    scsidrv_old_vector,d0
  66.     beq    @f
  67.     move.l    d0,SCSIDRV_VECTOR
  68.     clr.l    scsidrv_old_vector
  69. @@:
  70.     tst.b    extra_flag
  71.     bne    2f
  72.     move.l    keyin_full_old_vector,d0
  73.     beq    @f
  74.     move.l    d0,KEYIN_FULL_VECTOR
  75.     clr.l    keyin_full_old_vector
  76. @@:
  77. 2:
  78.     move.w    (sp)+,sr
  79.     bsr    user
  80.  
  81. 1:    tst.b    sram_write_level
  82.     beq    2f
  83.     bsr    sram_write_disable
  84.     bra    1b
  85. 2:
  86.  
  87. 1:    tst.b    scsi_hard_soft_level
  88.     beq    2f
  89.     bsr    scsi_hard_soft_off
  90.     bra    1b
  91. 2:
  92.  
  93.     bsr    tini_opm
  94.  
  95.     tst.b    nmi_aborted
  96.     bne    @f
  97.     tst.b    poweroff_aborted
  98.     bne    @f
  99.     tst.b    break_aborted
  100.     bne    @f
  101.     tst.b    ctrlc_aborted
  102.     bne    @f
  103.     bsr    close_data        ;アボートしたときクローズできないことがある
  104. @@:
  105.  
  106.     move.l    d7,d0            ;coreの返却値
  107.     rts
  108.  
  109. ;----------------------------------------------------------------
  110. ;再生コア
  111. ;<a2.l:パラメータバッファのアドレス
  112. ;<a6.l:base
  113.     .text
  114.     .align    4,$2048
  115. core:
  116.     bsr    open_data
  117.     bmi    99f
  118.     beq    99f
  119.  
  120.     move.b    data_timerd_count,d0
  121.     bsr    setup_timerd_routine    ;open_dataの後に行うこと
  122.  
  123.     bsr    init_opm
  124.  
  125.     tst.b    mono_play_flag
  126.     beq    1f
  127.     move.w    #$FF00,dummy_opm_data
  128.     bra    2f
  129. 1:    move.l    #$7FFF0000,dummy_opm_data
  130. 2:
  131.  
  132.     move.l    #dummy_opm_data,pointer
  133.  
  134.     tst.b    extra_flag
  135.     beq    @f
  136.     moveq.l    #0,d0
  137.     move.b    fadeout_speed,d0    ;フェードアウト速度(0~31,大きいほど速い)
  138.     add.w    d0,d0
  139.     lea.l    (extra_fadeout_table,pc),a0
  140.     move.w    (a0,d0.w),(extra_fadeout_count)r
  141.     move.w    #-1,(timera_fadeout_counter)r
  142. @@:
  143.  
  144.     bsr    super
  145.     move.w    sr,-(sp)
  146.     ori.w    #$0700,sr
  147.  
  148.     move.l    NMI_VECTOR,nmi_old_vector
  149.     move.l    #nmi_routine,NMI_VECTOR
  150.  
  151.     move.l    POWEROFF_VECTOR,poweroff_old_vector
  152.     move.l    #poweroff_routine,POWEROFF_VECTOR
  153.  
  154.   .if FORCE_CHANGE_SCSIDRV=0
  155.     tst.b    old_scsidrv_flag
  156.     beq    @f
  157.   .endif
  158.     move.l    SCSIDRV_VECTOR,scsidrv_old_vector
  159.     move.l    #scsidrv_routine,SCSIDRV_VECTOR
  160. @@:
  161.  
  162.     tst.b    extra_flag
  163.     bne    @f
  164.     move.l    KEYIN_FULL_VECTOR,keyin_full_old_vector
  165.     move.l    #keyin_full_routine,KEYIN_FULL_VECTOR
  166. @@:
  167.  
  168.     move.w    (sp)+,sr
  169.     bsr    user
  170.  
  171.     bsr    init_preconv
  172.  
  173.     lea.l    (m_read_message,pc),a0
  174.     bsr    silent_eprint
  175.  
  176.   .if CURRENT_TIME
  177.     clr.l    tmp_curtop        ;再生中か再生が終わったばかりのデータの先頭
  178.     clr.l    tmp_cursiz        ;再生中か再生が終わったばかりのデータのサイズ
  179.     clr.l    tmp_nxttop        ;再生前か再生が始まったばかりのデータの先頭
  180.     clr.l    tmp_nxtsiz        ;再生前か再生が始まったばかりのデータのサイズ
  181.     clr.l    tmp_ttlsiz        ;再生済みのデータのサイズ
  182.     move.l    output_frequency,d0    ;出力側のサンプリング周波数
  183.     tst.b    mono_play_flag
  184.     bne    @f
  185.     add.l    d0,d0            ;ステレオ再生のときは2バイト/サンプリング
  186. @@:
  187. ;<d0.l:バイト/秒
  188.     lea.l    tmp_size_table_btm,a0
  189.     move.l    d0,-(a0)        ;バイト/1秒
  190.     moveq.l    #10,d1
  191.     FPACK    __UMUL
  192.     move.l    d0,-(a0)        ;バイト/10秒
  193.     moveq.l    #6,d1
  194.     FPACK    __UMUL
  195.     move.l    d0,-(a0)        ;バイト/1分
  196.     moveq.l    #10,d1
  197.     FPACK    __UMUL
  198.     move.l    d0,-(a0)        ;バイト/10分
  199.     moveq.l    #10,d1
  200.     FPACK    __UMUL
  201.     subq.l    #1,d0
  202.     move.l    d0,-(a0)        ;バイト/99分59秒
  203.     clr.l    tmp_next_time
  204.  
  205.     lea.l    (normal_fadeout_table,pc),a0
  206.     moveq.l    #0,d0
  207.     move.b    fadeout_speed,d0    ;フェードアウト速度(0~31,大きいほど速い)
  208.     lsl.w    #2,d0
  209.     move.l    (a0,d0.l),d0
  210.     move.l    tmp_size_table_sec,d1    ;バイト/1秒
  211.     FPACK    __UMUL
  212.     lsr.l    #8,d0
  213.     move.l    d0,normal_fadeout_count    ;フェードアウト中に出力されるバイト数
  214.     move.l    #-1,normal_fadeout_limit
  215.   .endif
  216.  
  217.     movea.l    buf0top,a0
  218.     movea.l    buf1top,a1
  219.     bsr    read_data
  220.     ble    99f
  221.  
  222.   .if CURRENT_TIME
  223.     move.l    tmp_cursiz,d1
  224.     add.l    d1,tmp_ttlsiz        ;再生済みのデータのサイズ
  225.     move.l    tmp_nxtsiz,tmp_cursiz    ;再生中か再生が終わったばかりのデータのサイズ
  226.     move.l    d0,tmp_nxtsiz        ;再生前か再生が始まったばかりのデータのサイズ
  227.     move.l    tmp_nxttop,tmp_curtop    ;再生中か再生が終わったばかりのデータの先頭
  228.     move.l    buf0top,tmp_nxttop    ;再生前か再生が始まったばかりのデータの先頭
  229.   .endif
  230.  
  231.     tst.b    extra_flag
  232.     bne    @f
  233.     moveq.l    #0,d0
  234.     bsr    core_idle
  235.     bmi    89f
  236. @@:
  237.  
  238.   .if 0
  239.     tst.b    onmem_flag
  240.     beq    @f
  241.     move.l    #100*2,d0
  242.     bsr    wait_sec
  243. @@:
  244.   .endif
  245.  
  246.     lea.l    (m_play_message,pc),a0
  247.     bsr    silent_eprint
  248.  
  249.     bsr    super
  250.     move.w    sr,-(sp)
  251.     ori.w    #$0700,sr
  252.  
  253.     move.b    #$08,OPMADR        ;KEY ON/OFF
  254.  
  255.     move.b    TCDCR,timerd_old_tcdcr
  256.  
  257.     move.b    #$00,TCDCR        ;TIMERC,TIMERDカウント停止
  258.  
  259.     bclr.b    #5,IERB            ;TIMERC割り込み禁止,IPRBのbit5もクリアされる
  260.     bclr.b    #5,IMRB            ;TIMERC割り込み禁止
  261.  
  262.     bclr.b    #4,IERB            ;TIMERD割り込み禁止,IPRBのbit4もクリアされる
  263.     sne.b    timerd_old_ierb
  264.     bclr.b    #4,IMRB            ;TIMERD割り込み禁止
  265.     sne.b    timerd_old_imrb
  266.  
  267.   .if TEST_X68000=0
  268.     tst.b    current_machine_num
  269.     bne    1f
  270.   .endif
  271.     lea.l    mono_keyon_x68000,a0
  272.     tst.b    mono_play_flag
  273.     bne    2f
  274.     lea.l    stereo_keyon_x68000,a0
  275.     bra    2f
  276. 1:    lea.l    mono_keyon_x68030,a0
  277.     tst.b    mono_play_flag
  278.     bne    2f
  279.     lea.l    stereo_keyon_x68030,a0
  280. 2:
  281.  
  282.     move.l    TIMERD_VECTOR,timerd_old_vector
  283.     move.l    a0,TIMERD_VECTOR
  284.  
  285.     move.b    #KEYON_COUNT,TDDR    ;TIMERDは最初は34μs間隔で割り込む(後で変更される)
  286.  
  287.     move.b    #$71,TCDCR        ;TIMERCは1/200プリスケール(50μs),
  288.                     ;TIMERDは1/4プリスケール(1μs)間隔でカウント開始
  289.  
  290.     bset.b    #4,IMRB            ;TIMERD割り込み許可
  291.     bset.b    #4,IERB            ;TIMERD割り込み許可
  292.  
  293.     move.w    (sp)+,sr
  294.     bsr    user
  295.  
  296.     .align    4,$2048
  297. ;keyonがなるべく正確に行われるように再生が開始されるまでディスクアクセスをしない
  298. core_loop0:
  299.     tst.b    extra_flag
  300.     bne    @f
  301.     moveq.l    #0,d0
  302.     bsr    core_idle
  303.     bmi    89f
  304. @@:
  305.     cmpi.l    #dummy_opm_data,nxttop
  306.     bne    core_loop0
  307.     tst.b    onmem_flag
  308.     bne    core_onmem
  309.     bra    core_read2
  310.  
  311.     .align    4,$2048
  312. core_loop1:
  313.   .if CURRENT_TIME
  314.     bsr    current_time
  315. ;<d0.l:再生済みのデータのバイト数
  316.     bsr    print_current_time
  317. ;<d0.l:再生済みのデータのバイト数
  318.   .endif
  319.     bsr    core_idle
  320.     bmi    89f
  321.     cmpi.l    #dummy_opm_data,nxttop
  322.     bne    core_loop1
  323. core_read1:
  324.     movea.l    buf0top,a0
  325.     movea.l    buf1top,a1
  326.     bsr    read_data
  327.     ble    core_last
  328.   .if CURRENT_TIME
  329.     move.l    tmp_cursiz,d1
  330.     add.l    d1,tmp_ttlsiz        ;再生済みのデータのサイズ
  331.     move.l    tmp_nxtsiz,tmp_cursiz    ;再生中か再生が終わったばかりのデータのサイズ
  332.     move.l    d0,tmp_nxtsiz        ;再生前か再生が始まったばかりのデータのサイズ
  333.     move.l    tmp_nxttop,tmp_curtop    ;再生中か再生が終わったばかりのデータの先頭
  334.     move.l    buf0top,tmp_nxttop    ;再生前か再生が始まったばかりのデータの先頭
  335.   .endif
  336.     .align    4,$2048
  337. core_loop2:
  338.   .if CURRENT_TIME
  339.     bsr    current_time
  340. ;<d0.l:再生済みのデータのバイト数
  341.     bsr    print_current_time
  342. ;<d0.l:再生済みのデータのバイト数
  343.   .endif
  344.     bsr    core_idle
  345.     bmi    89f
  346.     cmpi.l    #dummy_opm_data,nxttop
  347.     bne    core_loop2
  348. core_read2:
  349.     movea.l    buf2top,a0
  350.     movea.l    buf3top,a1
  351.     bsr    read_data
  352.     ble    core_last
  353.   .if CURRENT_TIME
  354.     move.l    tmp_cursiz,d1
  355.     add.l    d1,tmp_ttlsiz        ;再生済みのデータのサイズ
  356.     move.l    tmp_nxtsiz,tmp_cursiz    ;再生中か再生が終わったばかりのデータのサイズ
  357.     move.l    d0,tmp_nxtsiz        ;再生前か再生が始まったばかりのデータのサイズ
  358.     move.l    tmp_nxttop,tmp_curtop    ;再生中か再生が終わったばかりのデータの先頭
  359.     move.l    buf2top,tmp_nxttop    ;再生前か再生が始まったばかりのデータの先頭
  360.   .endif
  361.     bra    core_loop1
  362.  
  363. core_onmem:
  364.     .align    4,$2048
  365. core_onmem_loop:
  366.   .if CURRENT_TIME
  367.     bsr    current_time
  368. ;<d0.l:再生済みのデータのバイト数
  369.     bsr    print_current_time
  370. ;<d0.l:再生済みのデータのバイト数
  371.   .endif
  372.     bsr    core_idle
  373.     bmi    89f
  374.     cmpi.l    #dummy_opm_data,pointer
  375.     bne    core_onmem_loop
  376.     movea.l    buf0top,a0
  377.     movea.l    buf1top,a1
  378.     bsr    read_data
  379.     ble    core_last
  380.   .if CURRENT_TIME
  381.     move.l    tmp_cursiz,d1
  382.     add.l    d1,tmp_ttlsiz        ;再生済みのデータのサイズ
  383.     move.l    tmp_nxtsiz,tmp_cursiz    ;再生中か再生が終わったばかりのデータのサイズ
  384.     move.l    d0,tmp_nxtsiz        ;再生前か再生が始まったばかりのデータのサイズ
  385.     move.l    tmp_nxttop,tmp_curtop    ;再生中か再生が終わったばかりのデータの先頭
  386.     move.l    buf0top,tmp_nxttop    ;再生前か再生が始まったばかりのデータの先頭
  387.   .endif
  388.     bra    core_onmem_loop
  389.  
  390.     .align    4,$2048
  391. core_last:
  392. core_loop3:
  393.   .if CURRENT_TIME
  394.     bsr    current_time
  395. ;<d0.l:再生済みのデータのバイト数
  396.     bsr    print_current_time
  397. ;<d0.l:再生済みのデータのバイト数
  398.   .endif
  399.     bsr    core_idle
  400.     bmi    89f
  401.     cmpi.l    #dummy_opm_data,pointer
  402.     bne    core_loop3
  403.   .if CURRENT_TIME
  404.     move.l    tmp_cursiz,d1
  405.     add.l    d1,tmp_ttlsiz        ;再生済みのデータのサイズ
  406.     move.l    tmp_nxtsiz,tmp_cursiz    ;再生中か再生が終わったばかりのデータのサイズ
  407.     clr.l    tmp_nxtsiz        ;再生前か再生が始まったばかりのデータのサイズ
  408.     move.l    tmp_nxttop,tmp_curtop    ;再生中か再生が終わったばかりのデータの先頭
  409.     clr.l    tmp_nxttop        ;再生前か再生が始まったばかりのデータの先頭
  410.     bsr    current_time
  411. ;<d0.l:再生済みのデータのバイト数
  412.     bsr    print_current_time
  413. ;<d0.l:再生済みのデータのバイト数
  414.   .endif
  415. 98:    bsr    silent_ecrlf
  416.     moveq.l    #0,d0
  417. 99:    tst.l    d0
  418.     rts
  419.  
  420. 89:    tst.b    esc_aborted
  421.     beq    98b
  422.     bsr    silent_ecrlf
  423.     moveq.l    #-1,d0
  424.     bra    99b
  425.  
  426.     .even
  427. extra_fadeout_table:
  428. n = 1
  429.   .rept 32
  430.     .if TIMERA_MODE=7
  431. ;50μs*256*4=51.2ms
  432.     .dc.w    9375/(n*n)
  433.     .else
  434.     .fail    1
  435.     .endif
  436. n = n+1
  437.   .endm
  438.  
  439.   .if CURRENT_TIME
  440.     .align    4,$2048
  441. normal_fadeout_table:
  442. n = 1
  443.     .rept 32
  444.     .dc.l    256*480/(n*n)
  445. n = n+1
  446.     .endm
  447.   .endif
  448.  
  449. m_read_message:        .dc.b    'バッファを充填しています',0
  450. m_play_message:        .dc.b    13,10
  451.   .if CURRENT_TIME
  452.             .dc.b    '再生中です … '
  453.   .else
  454.             .dc.b    '再生を開始します'
  455.   .endif
  456.             .dc.b    0
  457.     .even
  458.  
  459.     .data
  460.     .align    4
  461. timerd_old_vector:    .dc.l    0
  462.  
  463.     .data
  464. timerd_old_ierb:    .dc.b    0
  465. timerd_old_imrb:    .dc.b    0
  466. timerd_old_tcdcr:    .dc.b    $77
  467. timerd_old_tcdr:    .dc.b    200    ;(固定)50μs*200=10ms
  468. timerd_old_tddr:    .dc.b    20    ;(固定)50μs*20=1ms
  469.  
  470.     .bss
  471.     .even
  472. extra_fadeout_count:    .ds.w    1
  473.  
  474.   .if CURRENT_TIME
  475.     .align    4
  476. normal_fadeout_count:    .ds.l    1
  477. normal_fadeout_limit:    .ds.l    1
  478.   .endif
  479.  
  480.   .if CURRENT_TIME
  481. ;----------------------------------------------------------------
  482. ;再生済みのデータのバイト数を得る
  483. ;>d0.l:再生済みのデータのバイト数
  484. ;?d1-d2
  485.     .text
  486.     .align    4,$2048
  487. current_time:
  488.     movem.l    pointer,d0-d1        ;pointerとcurtopを同時に取得するためmovemを使う
  489.                     ;(間に割り込みが入ってはならない)
  490.                     ;d0=pointer,d1=curtop
  491.     move.l    tmp_ttlsiz,d2
  492.     cmp.l    tmp_nxttop,d1        ;再生前か再生が始まったばかりのデータの先頭
  493.     bne    @f
  494.     add.l    tmp_cursiz,d2        ;再生中か再生が終わったばかりのデータのサイズ
  495. @@:    sub.l    d1,d0            ;pointer-curtop
  496.     add.l    d2,d0            ;再生済みのデータのバイト数
  497.     rts
  498.  
  499. ;----------------------------------------------------------------
  500. ;現在の再生時間を表示する
  501. ;    ' mm:ss'
  502. ;<d0.l:再生済みのデータのバイト数
  503.     .text
  504.     .align    4,$2048
  505. print_current_time:
  506.     tst.b    silent_flag
  507.     bne    99f
  508.     cmp.l    tmp_next_time,d0
  509.     blo    99f
  510.     movem.l    d0-d2/a0-a1,-(sp)
  511.     move.l    d0,d2
  512.     lea.l    tmp_size_table,a1
  513.     cmp.l    (a1)+,d2
  514.     bls    @f
  515.     move.l    (-4,a1),d2        ;念のため99分59秒で止める
  516. @@:    move.l    d2,-(sp)
  517.     lea.l    (-16,sp),sp
  518.     movea.l    sp,a0
  519.     move.b    #$0C,(a0)+        ;1カラム右へ
  520. ;10分
  521.     move.l    (a1)+,d1
  522.     moveq.l    #'0'-1,d0
  523. 2:    addq.b    #1,d0
  524.     sub.l    d1,d2
  525.     bcc    2b
  526.     add.l    d1,d2
  527.     move.b    d0,(a0)+
  528. ;1分
  529.     move.l    (a1)+,d1
  530.     moveq.l    #'0'-1,d0
  531. 2:    addq.b    #1,d0
  532.     sub.l    d1,d2
  533.     bcc    2b
  534.     add.l    d1,d2
  535.     move.b    d0,(a0)+
  536.     move.b    #':',(a0)+
  537. ;10秒
  538.     move.l    (a1)+,d1
  539.     moveq.l    #'0'-1,d0
  540. 2:    addq.b    #1,d0
  541.     sub.l    d1,d2
  542.     bcc    2b
  543.     add.l    d1,d2
  544.     move.b    d0,(a0)+
  545. ;1秒
  546.     move.l    (a1)+,d1
  547.     moveq.l    #'0'-1,d0
  548. 2:    addq.b    #1,d0
  549.     sub.l    d1,d2
  550.     bcc    2b
  551.     add.l    d1,d2
  552.     move.b    d0,(a0)+
  553.     moveq.l    #$08,d0            ;BS
  554.   .rept 6
  555.     move.b    d0,(a0)+
  556.   .endm
  557.     sf.b    (a0)
  558.     movea.l    sp,a0
  559.     bsr    eprint
  560.     lea.l    (16,sp),sp
  561.     move.l    -(a1),d0
  562.     sub.l    d2,d0
  563.     add.l    (sp)+,d0
  564.     move.l    d0,tmp_next_time
  565.     movem.l    (sp)+,d0-d2/a0-a1
  566. 99:    rts
  567.  
  568.     .bss
  569.     .align    4
  570. tmp_size_table:        .ds.l    1    ;バイト/99分59秒
  571.             .ds.l    1    ;バイト/10分
  572.             .ds.l    1    ;バイト/1分
  573.             .ds.l    1    ;バイト/10秒
  574. tmp_size_table_sec:    .ds.l    1    ;バイト/1秒
  575. tmp_size_table_btm:
  576. tmp_next_time:        .ds.l    1    ;次に表示するタイミング
  577. ;----------------------------------------------------------------
  578.   .endif
  579.  
  580. ;----------------------------------------------------------------
  581. ;再生中の再生中止判定
  582. ;    ESCで再生を中止するため,ESCが押されたかどうか調べる
  583. ;    extraモードのときはフェードアウトの処理を行う
  584.   .if CURRENT_TIME
  585. ;<d0.l:再生済みのデータのバイト数
  586.   .endif
  587. ;<a6.l:base
  588. ;>d0.l:0=再生継続,-1=再生中止
  589. ;>n-flag:mi=再生中止
  590. ;?d1-d2
  591.     .text
  592.     .align    4,$2048
  593. core_idle:
  594.     tst.b    extra_flag
  595.     bne    10f
  596. ;extraモードでないとき
  597.     tst.b    tab_aborted
  598.     bne    91f            ;TABが押された
  599.     tst.b    esc_aborted
  600.     bne    90f            ;ESC/Qが押された
  601.   .if CURRENT_TIME
  602. ;<d0.l:再生済みのデータのバイト数
  603.     tst.l    normal_fadeout_limit
  604.     bpl    1f            ;フェードアウト中
  605.   .endif
  606.     tst.b    fadeout_requested
  607.     beq    @f
  608. ;フェードアウト開始
  609.   .if CURRENT_TIME
  610. ;<d0.l:再生済みのデータのバイト数
  611.     add.l    normal_fadeout_count,d0
  612.     move.l    d0,normal_fadeout_limit
  613.   .endif
  614.     bsr    do_fadeout
  615. @@:
  616.     bra    98f
  617.  
  618. ;フェードアウト中
  619. 1:    cmp.l    normal_fadeout_limit,d0
  620.     blo    98f
  621.     bra    92f            ;フェードアウト完了
  622.  
  623. ;extraモードのとき
  624. 10:
  625.   .if TEST_ESC
  626.     tst.b    esc_aborted
  627.     bne    90f
  628.   .endif
  629.     tst.w    (timera_fadeout_counter)r
  630.     beq    92f            ;フェードアウト完了
  631.     bpl    2f            ;フェードアウト中
  632. 1:    bsr    readControl
  633.     beq    2f
  634.     and.b    #%00100000,d0
  635.     beq    1b
  636. ;フェードアウト開始
  637.     move.w    (extra_fadeout_count)r,(timera_fadeout_counter)r
  638.     bsr    do_fadeout
  639. 2:
  640.  
  641. 98:    moveq.l    #0,d0
  642. 99:    rts
  643.  
  644. 91:    sf.b    tab_aborted
  645. 92:    sf.b    fadeout_requested
  646.     sf.b    fadeout_done_flag
  647. 90:    moveq.l    #-1,d0
  648.     bra    99b
  649.  
  650.     .bss
  651.     .align    4
  652. tmp_curtop:    .ds.l    1        ;再生中か再生が終わったばかりのデータの先頭
  653. tmp_cursiz:    .ds.l    1        ;再生中か再生が終わったばかりのデータのサイズ
  654. tmp_nxttop:    .ds.l    1        ;再生前か再生が始まったばかりのデータの先頭
  655. tmp_nxtsiz:    .ds.l    1        ;再生前か再生が始まったばかりのデータのサイズ
  656. tmp_ttlsiz:    .ds.l    1        ;再生済みのデータのサイズ
  657.  
  658. ;----------------------------------------------------------------
  659. ;フェードアウトする
  660.     .text
  661.     .align    4,$2048
  662. do_fadeout:
  663.     tst.b    fadeout_done_flag
  664.     bne    99f
  665.     st.b    fadeout_done_flag
  666.  
  667.     bsr    super
  668.  
  669.     tst.b    mono_play_flag
  670.     beq    1f
  671.  
  672.     move.w    sr,-(sp)
  673.     ori.w    #$0700,sr
  674.     bsr    70f
  675.   .irpc %c,0123
  676.     move.b    #$D8+%c,OPMADR
  677.     bsr    60f
  678.   .endm
  679.     move.b    mono_cur_opmadr,OPMADR
  680.     bsr    70f
  681.     move.w    (sp)+,sr
  682.     bra    2f
  683.  
  684. 1:    move.w    sr,-(sp)
  685.     ori.w    #$0700,sr
  686.     bsr    70f
  687.   .irpc %c,04152637
  688.     move.b    #$D8+%c,OPMADR
  689.     bsr    60f
  690.   .endm
  691.     move.w    (sp)+,sr
  692. 2:
  693.     bsr    user
  694. 99:    rts
  695.  
  696. 60:    bsr    70f
  697.     move.b    fadeout_speed,OPMDAT
  698. 70:    tst.b    JOY1
  699.     tst.b    JOY1
  700. @@:    tst.b    OPMDAT
  701.     bmi    @b
  702.     rts
  703.  
  704.     .data
  705. fadeout_done_flag:    .dc.b    0    ;-1=フェードアウト開始済み
  706. mono_cur_opmadr:    .dc.b    $78    ;モノラル再生のとき現在のOPMADRの値
  707.  
  708. ;----------------------------------------------------------------
  709. ;TIMERD割り込みルーチン
  710. ;----------------------------------------------------------------
  711. ;高品位再生ルーチン
  712. ;----------------------------------------------------------------
  713. ;高品位再生の方法
  714. ;    1chのPCMを再生するためにOPMを4ch使う
  715. ;    矩形波に近くて波長が非常に長い波を,OPMのch1~ch4で,
  716. ;    1/4周期(π/2)ずつずらしてkeyonする
  717. ;    ch1とch3およびch2とch4はそれぞれ位相が180度ずれている
  718. ;    つまり,ch1が+側にあるときch3は-側,ch2が+側にあるときch4は-側にある
  719. ;    1つのchを使い続けることができないので,4つのchを遷移しながら使う
  720. ;    ch1の1/8周期進んだところから1/4周期は,+側はch1,-側はch3,
  721. ;    次の1/4周期は,+側はch2,-側はch4,
  722. ;    次は,+側はch3,-側はch1,
  723. ;    最後の1/4周期は,+側はch4,-側はch2を使う
  724. ;    PCMデータをTLに変換てkeyonしたままのchのTLを操作することで波を作る
  725. ;    PCMデータの絶対値が0から増えるにつれてTLは127から減ってゆく
  726. ;    TLは7ビットしかないが,127に近い側は分解能が高いので,変位はかなり正確に再現できる
  727. ;    PCMを乗せるchを切り換えるとき,
  728. ;    それまで使用していたchのTLを0に戻してから次のchを立ち上げなければならないので,
  729. ;    どうしてもTL=0のデータが1回分出力されてしまう
  730. ;    PCMデータの符号が変化するときは,その前後で0に近い方のデータを強制的に0にする
  731. ;    波形が少し変化してしまうが,もともと0を横切るときの変位が0に近いデータなので,
  732. ;    影響は少ない
  733. ;    1/4周期毎のchの遷移のタイミングは個々に厳密である必要はないので,
  734. ;    PCMデータの符号が変化するまで少し待って,符号が変化したときに便乗して遷移する
  735. ;    一定期間符号が変化しなければ強制的に0を挟んで遷移しなければならない
  736. ;    PCMデータにない0を挟んだときはプチノイズが発生する
  737. ;    ステレオの場合は上記の処理をleft/rightそれぞれ独立して行いつつ,
  738. ;    left/right交互に編むようにして進めなければならないので,手順がかなり複雑になる
  739. ;    1周期の長さは平均としては極めて正確に管理する必要があるので,
  740. ;    割り込み回数だけでなく,正確にカウントできるタイマカウンタを併用する
  741. ;----------------------------------------------------------------
  742.  
  743. ;----------------------------------------------------------------
  744. ;パラメータ
  745.  
  746. ;OPMで発声する矩形波(に近い音)の1周期を,0.103563秒と仮定する.
  747. ;(0.103562秒~0.103566秒の範囲)
  748. ;1/2周期は0.0517815秒.
  749. ;1/4周期は0.02589075秒.
  750.  
  751. ;KEYON_COUNTとKEYON_INTERVAL
  752. ;4チャンネルを1/4周期ずつずらしてkeyonする.
  753. ;なるべく正確にkeyonできるように割り込み間隔を調整する.
  754. KEYON_COUNT    =    34    ;なるべくTIMERD_COUNTよりも大きくすること.
  755.                 ;ただし,あまり大きくしすぎないこと.
  756. KEYON_INTERVAL1    =    761    ;0.103563/4/0.000034=761.49264705882
  757. KEYON_INTERVAL2    =    762
  758. KEYON_INTERVAL3    =    761
  759. KEYON_INTERVAL4    =    762
  760.  
  761. ;TIMERD_COUNT
  762. ;TIMERDの割り込み間隔(μs単位).
  763. ;44.1kHzはデータの間隔が1/44100=0.0000226757369614512471655328798186秒であり,
  764. ;割り切れないので,周波数の変換が必要.
  765. TIMERD_COUNT    =    TIMERD_COUNT_000
  766.  
  767. ;FREQUENCY
  768. ;サンプリング周波数.
  769. ;TIMERDの割り込み間隔とサンプリング周波数の関係
  770. ;    TIMERD_COUNT(μs)    FREQUENCY(Hz)
  771. ;        20        50000
  772. ;        21        47619
  773. ;        22        45455
  774. ;        23        43478
  775. ;        24        41667
  776. ;        25        40000
  777. ;        26        38462
  778. ;        27        37037
  779. ;        28        35714
  780. ;        29        34483
  781. ;        30        33333
  782. ;        31        32258
  783. ;        32        31250
  784. ;        33        30303
  785. ;        34        29412
  786. ;        35        28571
  787. ;        36        27778
  788. ;        37        27027
  789. ;        38        26316
  790. ;        39        25641
  791. ;        40        25000
  792. ;        41        24390
  793. ;        42        23810
  794. ;        43        23256
  795. ;        44        22727
  796. ;        45        22222
  797. ;        46        21739
  798. ;        47        21277
  799. ;        48        20833
  800. ;        49        20408
  801. ;        50        20000
  802. FREQUENCY    =    (1000000+TIMERD_COUNT/2)/TIMERD_COUNT    ;モノラルのとき
  803. ;FREQUENCY    =    (1000000+TIMERD_COUNT/2)/(TIMERD_COUNT*2)    ;ステレオのとき
  804.  
  805. ;PLAY_INTERVAL
  806. ;1/4周期の割り込み回数.
  807. PLAY_INTERVAL    =    25890/TIMERD_COUNT    ;floor(0.103563/4*1000000)=25890
  808.  
  809. ;DELTA_TIMERC
  810. ;1周期の長さの微調整.
  811. ;16ビットのワークからこの値を引き,結果の上位8ビットをTIMERCの目標値とする.
  812. ;TIMERCは0.000050秒間隔で255~0の間でカウントダウンしている.
  813. ;目標の少し手前からTIMERCのカウンタを監視して,1周期の終わりを決定する.
  814. ;0.103563/0.000050=2071.26=256*8+23.26より,
  815. ;TIMERCのカウンタは1周期の間に8回オーバーフローしてから23.26減る.
  816. DELTA_TIMERC    =    5955    ;5955/256=23.26171875
  817.                 ;(23.26171875+256*8)*0.000050=0.1035630859375
  818.  
  819. ;BEFORE_TIMERC
  820. ;1周期の終わりの何カウント手前からTIMERCを監視するか.
  821. ;1周期の終わりからTIMERCで前後に128カウント以上外れると正常に機能しないので,
  822. ;この値はあまり大きくできない.
  823. ;小さすぎても,TIMERD割り込みを多く取りこぼしたときに正常に再生できなくなる.
  824. BEFORE_TIMERC    =    1600/TIMERD_COUNT    ;0.000050*128*1000000=6400,*1/4
  825.  
  826. ;MUTE_DELAY
  827. ;データが0になるまで遅延する最大のカウント数.
  828. ;チャンネル遷移をデータが0になるまで遅延してノイズを減らす.
  829. ;WAVE_FORM=1のとき,矩形波が安定している部分が,位相がπ/2と3π/2の位置に,
  830. ;それぞれ前後合わせて約41/96周期=約0.04423秒ある.
  831. ;1/4周期よりも0.04423-0.103563/4=0.01833925秒だけ余裕があることになるが,
  832. ;中心を外れると音が悪くなるので,あまりずらすことはできない.
  833. MUTE_DELAY    =    9169/TIMERD_COUNT    ;floor((0.04423-0.103563/4)*100000)=18339,*1/2
  834. ;WAVE_FORM=2のとき,矩形波が安定している部分が,位相がπ/2と3π/2の位置に,
  835. ;それぞれ前後合わせて約34/96周期=約0.03668秒ある.
  836. ;1/4周期よりも0.03668-0.103563/4=0.01079秒だけ余裕があることになる.
  837.  
  838. ;STANDBY_DELAY
  839. ;1周期の先頭から矩形波を使い始める位置までのカウント数.
  840. ;各チャンネルは1周期の先頭から1/8周期経ったところから使う.
  841. ;MUTE_DELAYがあるので少し手前にずらしておく.
  842. STANDBY_DELAY    =    12945/TIMERD_COUNT-MUTE_DELAY/2    ;floor(0.103563/8*1000000)=12945
  843.  
  844. ;----------------------------------------------------------------
  845. ;パラメータのサンプル
  846. ;
  847. ;    TIMERD_COUNT    =    20
  848. ;    FREQUENCY    =    50000    ;1/0.000020=50000
  849. ;    PLAY_INTERVAL    =    1294    ;0.103563/0.000020/4=1294.5375
  850. ;    BEFORE_TIMERC    =    51    ;0.000016*128/0.000020=102.4,/2=51.2
  851. ;    MUTE_DELAY    =    305    ;(0.04423-0.103563/4)/0.000020=916.9625
  852. ;                    ;/3=305.65416666667
  853. ;                    ;0.5/(305*0.000020)=81.967213114754より,
  854. ;                    ;82Hz未満の音にノイズが入る
  855. ;    STANDBY_DELAY    =    647-MUTE_DELAY/3    ;0.103563/8/0.000020=647.26875
  856. ;
  857. ;    TIMERD_COUNT    =    50
  858. ;    FREQUENCY    =    20000    ;1/0.000050=20000
  859. ;    PLAY_INTERVAL    =    517    ;0.103563/0.000050/4=517.815
  860. ;    BEFORE_TIMERC    =    20    ;0.000016*128/0.000050=40.96,/2=20.48
  861. ;    MUTE_DELAY    =    122    ;(0.04423-0.103563/4)/0.000050=366.785
  862. ;                    ;/3=122.26166666667
  863. ;                    ;0.5/(122*0.000050)=81.967213114754より,
  864. ;                    ;82Hz未満の音にノイズが入る
  865. ;    STANDBY_DELAY    =    258-MUTE_DELAY/3    ;0.103563/8/0.000050=258.9075
  866.  
  867. ;----------------------------------------------------------------
  868. ;セットアップテーブルの構造
  869.     .offset    0
  870. STANDBY_DELAY_0:    .ds.w    1    ;#STANDBY_DELAY-1
  871. INTERVAL_MONO_LAST_2:    .ds.w    1    ;#PLAY_INTERVAL-2-BEFORE_TIMERC-1-MUTE_DELAY
  872. INTERVAL_MONO_LAST_1:    .ds.w    1    ;#PLAY_INTERVAL-2-BEFORE_TIMERC-1-(MUTE_DELAY-1)
  873. INTERVAL_MONO_LAST_0:    .ds.w    1    ;#PLAY_INTERVAL-2-BEFORE_TIMERC-1
  874. INTERVAL_MONO_2:    .ds.w    1    ;#PLAY_INTERVAL-2-1-MUTE_DELAY
  875. INTERVAL_MONO_1:    .ds.w    1    ;#PLAY_INTERVAL-2-1-(MUTE_DELAY-1)
  876. INTERVAL_MONO_0:    .ds.w    1    ;#PLAY_INTERVAL-2-1
  877. MUTE_STEREO_DELAY_0:    .ds.w    1    ;#MUTE_DELAY/2-1
  878. MUTE_MONO_DELAY_1:    .ds.w    1    ;#MUTE_DELAY-1-1
  879. MUTE_MONO_DELAY_0:    .ds.w    1    ;#MUTE_DELAY-1
  880. INTERVAL_STEREO_2:    .ds.w    1    ;#(PLAY_INTERVAL-2-MUTE_DELAY)/2-1
  881. INTERVAL_STEREO_LAST_2:    .ds.w    1    ;#(PLAY_INTERVAL-2-BEFORE_TIMERC-MUTE_DELAY)/2-1
  882. INTERVAL_STEREO_LAST_1:    .ds.w    1    ;#(PLAY_INTERVAL-2-BEFORE_TIMERC-(MUTE_DELAY-1))/2-1
  883. INTERVAL_STEREO_1:    .ds.w    1    ;#(PLAY_INTERVAL-2-(MUTE_DELAY-1))/2-1
  884. INTERVAL_STEREO_0:    .ds.w    1    ;#(PLAY_INTERVAL-2)/2-1
  885. SETUP_TABLE_LENGTH:
  886.     .text
  887.  
  888. ;----------------------------------------------------------------
  889. ;セットアップする領域の初期値
  890. STARTING_STANDBY_DELAY_0    =    STANDBY_DELAY-1
  891. STARTING_INTERVAL_MONO_LAST_2    =    PLAY_INTERVAL-2-BEFORE_TIMERC-1-MUTE_DELAY
  892. STARTING_INTERVAL_MONO_LAST_1    =    PLAY_INTERVAL-2-BEFORE_TIMERC-1-(MUTE_DELAY-1)
  893. STARTING_INTERVAL_MONO_LAST_0    =    PLAY_INTERVAL-2-BEFORE_TIMERC-1
  894. STARTING_INTERVAL_MONO_2    =    PLAY_INTERVAL-2-1-MUTE_DELAY
  895. STARTING_INTERVAL_MONO_1    =    PLAY_INTERVAL-2-1-(MUTE_DELAY-1)
  896. STARTING_INTERVAL_MONO_0    =    PLAY_INTERVAL-2-1
  897. STARTING_MUTE_STEREO_DELAY_0    =    MUTE_DELAY/2-1
  898. STARTING_MUTE_MONO_DELAY_1    =    MUTE_DELAY-1-1
  899. STARTING_MUTE_MONO_DELAY_0    =    MUTE_DELAY-1
  900. STARTING_INTERVAL_STEREO_2    =    (PLAY_INTERVAL-2-MUTE_DELAY)/2-1
  901. STARTING_INTERVAL_STEREO_LAST_2    =    (PLAY_INTERVAL-2-BEFORE_TIMERC-MUTE_DELAY)/2-1
  902. STARTING_INTERVAL_STEREO_LAST_1    =    (PLAY_INTERVAL-2-BEFORE_TIMERC-(MUTE_DELAY-1))/2-1
  903. STARTING_INTERVAL_STEREO_1    =    (PLAY_INTERVAL-2-(MUTE_DELAY-1))/2-1
  904. STARTING_INTERVAL_STEREO_0    =    (PLAY_INTERVAL-2)/2-1
  905.  
  906. ;----------------------------------------------------------------
  907. ;TIMERD割り込みルーチンのセットアップ
  908. ;<d0.b:TIMERD_COUNT(20~50)
  909.     .text
  910.     .align    4,$2048
  911. setup_timerd_routine:
  912.     movem.l    d0-d5/a0-a2,-(sp)
  913.  
  914.     and.l    #$000000FF,d0
  915.  
  916.     cmp.b    timerd_count,d0
  917.     beq    99f            ;セットアップ済み
  918.  
  919.     move.b    d0,timerd_count        ;TIMERD_COUNT
  920.  
  921.     lea.l    setup_table,a2
  922.  
  923.     moveq.l    #0,d1
  924.     move.b    d0,d1            ;TIMERD_COUNT
  925.  
  926.   .if TEST_DEBUG_SWITCH
  927.     tst.b    debug_flag
  928.     beq    @f
  929.     lea.l    (m_timerd_count,pc),a0
  930.     bsr    eprint
  931.     move.l    d1,d0
  932.     bsr    utos_eprint
  933.     bsr    ecrlf
  934. @@:
  935.   .endif
  936.  
  937.   .if TEST_DEBUG_SWITCH
  938.     move.l    debugp,d2
  939.     bpl    @f
  940.   .endif
  941.     move.l    #25890,d2        ;floor(0.103563/4*1000000)=25890
  942.     tst.b    current_machine_num
  943.     beq    @f
  944.     move.l    #25890,d2        ;floor(0.103563/4*1000000)=25890
  945. @@:
  946.   .if TEST_DEBUG_SWITCH
  947.     tst.b    debug_flag
  948.     beq    @f
  949.     lea.l    (m_debugp,pc),a0
  950.     bsr    eprint
  951.     move.l    d2,d0
  952.     bsr    utos_eprint
  953.     bsr    ecrlf
  954. @@:
  955.   .endif
  956.     divu.w    d1,d2            ;25890/TIMERD_COUNT
  957.                     ;PLAY_INTERVAL
  958.   .if TEST_DEBUG_SWITCH
  959.     tst.b    debug_flag
  960.     beq    @f
  961.     lea.l    (m_play_interval,pc),a0
  962.     bsr    eprint
  963.     moveq.l    #0,d0
  964.     move.w    d2,d0
  965.     bsr    utos_eprint
  966.     bsr    ecrlf
  967. @@:
  968.   .endif
  969.  
  970.   .if TEST_DEBUG_SWITCH
  971.     move.l    debugb,d3
  972.     bpl    @f
  973.   .endif
  974.     move.l    #1600,d3        ;0.000050*128*1000000=6400,*1/4
  975.     tst.b    current_machine_num
  976.     beq    @f
  977.     move.l    #1600,d3        ;0.000050*128*1000000=6400,*1/4
  978. @@:
  979.   .if TEST_DEBUG_SWITCH
  980.     tst.b    debug_flag
  981.     beq    @f
  982.     lea.l    (m_debugb,pc),a0
  983.     bsr    eprint
  984.     move.l    d3,d0
  985.     bsr    utos_eprint
  986.     bsr    ecrlf
  987. @@:
  988.   .endif
  989.     divu.w    d1,d3            ;1600/TIMERD_COUNT
  990.                     ;BEFORE_TIMERC
  991.   .if TEST_DEBUG_SWITCH
  992.     tst.b    debug_flag
  993.     beq    @f
  994.     lea.l    (m_before_timerc,pc),a0
  995.     bsr    eprint
  996.     moveq.l    #0,d0
  997.     move.w    d3,d0
  998.     bsr    utos_eprint
  999.     bsr    ecrlf
  1000. @@:
  1001.   .endif
  1002.  
  1003.   .if TEST_DEBUG_SWITCH
  1004.     move.l    debugm,d4
  1005.     bpl    @f
  1006.   .endif
  1007.     move.l    #9169,d4        ;floor((0.04423-0.103563/4)*100000)=18339,*1/2
  1008.     tst.b    current_machine_num
  1009.     beq    @f
  1010.     move.l    #9169,d4        ;floor((0.04423-0.103563/4)*100000)=18339,*1/2
  1011. @@:
  1012.   .if TEST_DEBUG_SWITCH
  1013.     tst.b    debug_flag
  1014.     beq    @f
  1015.     lea.l    (m_debugm,pc),a0
  1016.     bsr    eprint
  1017.     move.l    d4,d0
  1018.     bsr    utos_eprint
  1019.     bsr    ecrlf
  1020. @@:
  1021.   .endif
  1022.     divu.w    d1,d4            ;12226/TIMERD_COUNT
  1023.                     ;MUTE_DELAY
  1024.   .if TEST_DEBUG_SWITCH
  1025.     tst.b    debug_flag
  1026.     beq    @f
  1027.     lea.l    (m_mute_delay,pc),a0
  1028.     bsr    eprint
  1029.     moveq.l    #0,d0
  1030.     move.w    d4,d0
  1031.     bsr    utos_eprint
  1032.     bsr    ecrlf
  1033. @@:
  1034.   .endif
  1035.  
  1036.   .if TEST_DEBUG_SWITCH
  1037.     move.l    debugs,d5
  1038.     bpl    @f
  1039.   .endif
  1040.     move.l    #12945,d5        ;floor(0.103563/8*1000000)=12945
  1041.     tst.b    current_machine_num
  1042.     beq    @f
  1043.     move.l    #12945,d5        ;floor(0.103563/8*1000000)=12945
  1044. @@:
  1045.   .if TEST_DEBUG_SWITCH
  1046.     tst.b    debug_flag
  1047.     beq    @f
  1048.     lea.l    (m_debugs,pc),a0
  1049.     bsr    eprint
  1050.     move.l    d5,d0
  1051.     bsr    utos_eprint
  1052.     bsr    ecrlf
  1053. @@:
  1054.   .endif
  1055.     divu.w    d1,d5            ;12945/TIMERD_COUNT
  1056.     move.w    d4,d0            ;MUTE_DELAY
  1057.     lsr.w    #2,d0            ;MUTE_DELAY/4
  1058.     sub.w    d0,d5            ;12945/TIMERD_COUNT-MUTE_DELAY/4
  1059.                     ;STANDBY_DELAY
  1060.   .if TEST_DEBUG_SWITCH
  1061.     tst.b    debug_flag
  1062.     beq    @f
  1063.     lea.l    (m_standby_delay,pc),a0
  1064.     bsr    eprint
  1065.     moveq.l    #0,d0
  1066.     move.w    d5,d0
  1067.     bsr    utos_eprint
  1068.     bsr    ecrlf
  1069. @@:
  1070.   .endif
  1071.  
  1072.     subq.w    #1,d5            ;STANDBY_DELAY-1
  1073.  
  1074.     move.w    d5,(STANDBY_DELAY_0,a2)    ;STANDBY_DELAY-1
  1075.  
  1076.     subq.w    #2,d2            ;PLAY_INTERVAL-2
  1077.  
  1078.     move.w    d2,d0            ;PLAY_INTERVAL-2
  1079.     sub.w    d3,d0            ;PLAY_INTERVAL-2-BEFORE_TIMERC
  1080.     subq.w    #1,d0            ;PLAY_INTERVAL-2-BEFORE_TIMERC-1
  1081.     move.w    d0,(INTERVAL_MONO_LAST_0,a2)    ;PLAY_INTERVAL-2-BEFORE_TIMERC-1
  1082.     sub.w    d4,d0            ;PLAY_INTERVAL-2-BEFORE_TIMERC-1-MUTE_DELAY
  1083.     move.w    d0,(INTERVAL_MONO_LAST_2,a2)    ;PLAY_INTERVAL-2-BEFORE_TIMERC-1-MUTE_DELAY
  1084.     addq.w    #1,d0            ;PLAY_INTERVAL-2-BEFORE_TIMERC-1-(MUTE_DELAY-1)
  1085.     move.w    d0,(INTERVAL_MONO_LAST_1,a2)    ;PLAY_INTERVAL-2-BEFORE_TIMERC-1-(MUTE_DELAY-1)
  1086.     add.w    d3,d0            ;PLAY_INTERVAL-2-1-(MUTE_DELAY-1)
  1087.     move.w    d0,(INTERVAL_MONO_1,a2)    ;PLAY_INTERVAL-2-1-(MUTE_DELAY-1)
  1088.     subq.w    #1,d0            ;PLAY_INTERVAL-2-1-MUTE_DELAY
  1089.     move.w    d0,(INTERVAL_MONO_2,a2)    ;PLAY_INTERVAL-2-1-MUTE_DELAY
  1090.     add.w    d4,d0            ;PLAY_INTERVAL-2-1
  1091.     move.w    d0,(INTERVAL_MONO_0,a2)    ;PLAY_INTERVAL-2-1
  1092.  
  1093.     move.w    d4,d0            ;MUTE_DELAY
  1094.     lsr.w    #1,d0            ;MUTE_DELAY/2
  1095.     subq.w    #1,d0            ;MUTE_DELAY/2-1
  1096.     move.w    d0,(MUTE_STEREO_DELAY_0,a2)    ;MUTE_DELAY/2-1
  1097.  
  1098.     move.w    d4,d0            ;MUTE_DELAY
  1099.     subq.w    #1,d0            ;MUTE_DELAY-1
  1100.     move.w    d0,(MUTE_MONO_DELAY_0,a2)    ;MUTE_DELAY-1
  1101.     subq.w    #1,d0            ;MUTE_DELAY-1-1
  1102.     move.w    d0,(MUTE_MONO_DELAY_1,a2)    ;MUTE_DELAY-1-1
  1103.  
  1104.     move.w    d2,d0            ;PLAY_INTERVAL-2
  1105.     sub.w    d4,d0            ;PLAY_INTERVAL-2-MUTE_DELAY
  1106.     lsr.w    #1,d0            ;(PLAY_INTERVAL-2-MUTE_DELAY)/2
  1107.     subq.w    #1,d0            ;(PLAY_INTERVAL-2-MUTE_DELAY)/2-1
  1108.     move.w    d0,(INTERVAL_STEREO_2,a2)    ;(PLAY_INTERVAL-2-MUTE_DELAY)/2-1
  1109.  
  1110.     move.w    d2,d0            ;PLAY_INTERVAL-2
  1111.     sub.w    d3,d0            ;PLAY_INTERVAL-2-BEFORE_TIMERC
  1112.     sub.w    d4,d0            ;PLAY_INTERVAL-2-BEFORE_TIMERC-MUTE_DELAY
  1113.     lsr.w    #1,d0            ;(PLAY_INTERVAL-2-BEFORE_TIMERC-MUTE_DELAY)/2
  1114.     subq.w    #1,d0            ;(PLAY_INTERVAL-2-BEFORE_TIMERC-MUTE_DELAY)/2-1
  1115.     move.w    d0,(INTERVAL_STEREO_LAST_2,a2)    ;(PLAY_INTERVAL-2-BEFORE_TIMERC-MUTE_DELAY)/2-1
  1116.  
  1117.     move.w    d2,d0            ;PLAY_INTERVAL-2
  1118.     sub.w    d3,d0            ;PLAY_INTERVAL-2-BEFORE_TIMERC
  1119.     sub.w    d4,d0            ;PLAY_INTERVAL-2-BEFORE_TIMERC-MUTE_DELAY
  1120.     addq.w    #1,d0            ;PLAY_INTERVAL-2-BEFORE_TIMERC-(MUTE_DELAY-1)
  1121.     lsr.w    #1,d0            ;(PLAY_INTERVAL-2-BEFORE_TIMERC-(MUTE_DELAY-1))/2
  1122.     subq.w    #1,d0            ;(PLAY_INTERVAL-2-BEFORE_TIMERC-(MUTE_DELAY-1))/2-1
  1123.     move.w    d0,(INTERVAL_STEREO_LAST_1,a2)    ;(PLAY_INTERVAL-2-BEFORE_TIMERC-(MUTE_DELAY-1))/2-1
  1124.  
  1125.     move.w    d2,d0            ;PLAY_INTERVAL-2
  1126.     sub.w    d4,d0            ;PLAY_INTERVAL-2-MUTE_DELAY
  1127.     addq.w    #1,d0            ;PLAY_INTERVAL-2-(MUTE_DELAY-1)
  1128.     lsr.w    #1,d0            ;(PLAY_INTERVAL-2-(MUTE_DELAY-1))/2
  1129.     subq.w    #1,d0            ;(PLAY_INTERVAL-2-(MUTE_DELAY-1))/2-1
  1130.     move.w    d0,(INTERVAL_STEREO_1,a2)    ;(PLAY_INTERVAL-2-(MUTE_DELAY-1))/2-1
  1131.  
  1132.     move.w    d2,d0            ;PLAY_INTERVAL-2
  1133.     lsr.w    #1,d0            ;(PLAY_INTERVAL-2)/2
  1134.     subq.w    #1,d0            ;(PLAY_INTERVAL-2)/2-1
  1135.     move.w    d0,(INTERVAL_STEREO_0,a2)    ;(PLAY_INTERVAL-2)/2-1
  1136.  
  1137.     lea.l    setup_target,a0
  1138.     lea.l    setup_list,a1
  1139.     move.w    #(setup_list_end-setup_list)/4-1,d1
  1140. 1:    adda.w    (a1)+,a0        ;オフセット
  1141.     move.w    (a1)+,d0        ;タイプ
  1142.     move.w    (a2,d0.w),(a0)
  1143.     dbra    d1,1b
  1144.  
  1145.     bsr    cache_flush
  1146.  
  1147. 99:
  1148.     movem.l    (sp)+,d0-d5/a0-a2
  1149.     rts
  1150.  
  1151.   .if TEST_DEBUG_SWITCH
  1152. m_timerd_count:        .dc.b    'TIMERD_COUNT=',0
  1153. m_debugp:        .dc.b    '-debugp=',0
  1154. m_play_interval:    .dc.b    'PLAY_INTERVAL=',0
  1155. m_debugb:        .dc.b    '-debugb=',0
  1156. m_before_timerc:    .dc.b    'BEFORE_TIMERC=',0
  1157. m_debugm:        .dc.b    '-debugm=',0
  1158. m_mute_delay:        .dc.b    'MUTE_DELAY=',0
  1159. m_debugs:        .dc.b    '-debugs=',0
  1160. m_standby_delay:    .dc.b    'STANDBY_DELAY=',0
  1161.   .endif
  1162.  
  1163.     .data
  1164. timerd_count:    .dc.b    -1
  1165.     .even
  1166. setup_table:    .ds.b    SETUP_TABLE_LENGTH
  1167.  
  1168.     .data
  1169.   .if TEST_DEBUG_SWITCH
  1170. debug_flag::    .dc.b    0
  1171.     .align    4
  1172. debugp::    .dc.l    -1
  1173. debugb::    .dc.l    -1
  1174. debugm::    .dc.l    -1
  1175. debugs::    .dc.l    -1
  1176.   .endif
  1177.  
  1178. ;----------------------------------------------------------------
  1179. ;TIMERD割り込みセットアップマクロ
  1180. ;    SETUP_LIST_START~SETUP_LIST_ENDは1回のみ使用可能
  1181. ;    SETUP_LIST_START~SETUP_LIST_ENDの間に.data領域を記述しないこと
  1182. SETUP_LIST_START    .macro
  1183.     .text
  1184.     .even
  1185. setup_target:
  1186. prepos = (*)
  1187.     .data
  1188.     .even
  1189. setup_list:
  1190.     .text
  1191.     .endm
  1192.  
  1193. SETUP_MOVEW_IMM    .macro    src,dst
  1194. @pos:
  1195.     move.w    #STARTING_&src.w,dst
  1196.     .data
  1197.     .dc.w    (@pos+2)-prepos,src
  1198.     .text
  1199. prepos = @pos+2
  1200.     .endm
  1201.  
  1202. SETUP_ADDIW_IMM    .macro    src,dst
  1203. @pos:
  1204.     addi.w    #STARTING_&src.w,dst
  1205.     .data
  1206.     .dc.w    (@pos+2)-prepos,src
  1207.     .text
  1208. prepos = @pos+2
  1209.     .endm
  1210.  
  1211. SETUP_LIST_END    .macro
  1212.     .data
  1213. setup_list_end:
  1214.     .text
  1215.     .endm
  1216.  
  1217. ;----------------------------------------------------------------
  1218. ;変換済みデータをモノラル再生
  1219. ;----------------------------------------------------------------
  1220. mono_body    .macro
  1221.     .text
  1222.     .even
  1223. ;----------------------------------------------------------------
  1224.     KEYON_ENTRY
  1225. @mono_keyon1:
  1226.     DI
  1227.     move.b    #%0_1_1_1_1_000,OPMDAT    ;C2=1,M2=1,C1=1,M1=1(CH1)
  1228.     move.w    #KEYON_INTERVAL1-1-1,counter
  1229.     move.l    #@mono_phase1to2,TIMERD_VECTOR
  1230.     rte
  1231.  
  1232.     KEYON_ENTRY
  1233. @mono_phase1to2:
  1234.     DI
  1235.     subq.w    #1,counter
  1236.     bcs    @f
  1237.     rte
  1238. @@:    move.l    #@mono_keyon2,TIMERD_VECTOR
  1239.     rte
  1240.  
  1241. ;----------------------------------------------------------------
  1242.     KEYON_ENTRY
  1243. @mono_keyon2:
  1244.     DI
  1245.     move.b    #%0_1_1_1_1_001,OPMDAT    ;C2=1,M2=1,C1=1,M1=1(CH2)
  1246.     move.w    #KEYON_INTERVAL2-1-1,counter
  1247.     move.l    #@mono_phase2to3,TIMERD_VECTOR
  1248.     rte
  1249.  
  1250.     KEYON_ENTRY
  1251. @mono_phase2to3:
  1252.     DI
  1253.     subq.w    #1,counter
  1254.     bcs    @f
  1255.     rte
  1256. @@:    move.l    #@mono_keyon3,TIMERD_VECTOR
  1257.     rte
  1258.  
  1259. ;----------------------------------------------------------------
  1260.     KEYON_ENTRY
  1261. @mono_keyon3:
  1262.     DI
  1263.     move.b    #%0_1_1_1_1_010,OPMDAT    ;C2=1,M2=1,C1=1,M1=1(CH3)
  1264.     move.w    #KEYON_INTERVAL3-1-1,counter
  1265.     move.l    #@mono_phase3to4,TIMERD_VECTOR
  1266.     rte
  1267.  
  1268.     KEYON_ENTRY
  1269. @mono_phase3to4:
  1270.     DI
  1271.     subq.w    #1,counter
  1272.     bcs    @f
  1273.     rte
  1274. @@:    move.l    #@mono_keyon4,TIMERD_VECTOR
  1275.     rte
  1276.  
  1277. ;----------------------------------------------------------------
  1278.     KEYON_ENTRY
  1279. @mono_keyon4:
  1280.     DI
  1281.     move.b    #%0_1_1_1_1_011,OPMDAT    ;C2=1,M2=1,C1=1,M1=1(CH4)
  1282.     move.w    #KEYON_INTERVAL4-1-1,counter
  1283.     move.l    #@mono_phase4to1,TIMERD_VECTOR
  1284.     rte
  1285.  
  1286.     KEYON_ENTRY
  1287. @mono_phase4to1:
  1288.     DI
  1289.     subq.w    #1,counter
  1290.     bcs    @f
  1291.     rte
  1292. @@:    SETUP_MOVEW_IMM    STANDBY_DELAY_0,counter
  1293.     move.l    #@mono_standby,TIMERD_VECTOR
  1294.     move.b    timerd_count,TDDR    ;TIMERD割り込み間隔を変更する
  1295.     rte
  1296.  
  1297.     KEYON_ENTRY
  1298. @mono_standby:
  1299.     TIMERD_DI
  1300.     subq.w    #1,counter
  1301.     bcs    @f
  1302.     rte
  1303. @@:    move.b    #0,TCDR            ;TIMERCカウンタ初期化
  1304.     move.w    #(-DELTA_TIMERC).and.$FFFF,delta_timerc
  1305.     SETUP_MOVEW_IMM    INTERVAL_MONO_0,counter
  1306.     move.l    #@mono1_start_1,TIMERD_VECTOR
  1307.     rte
  1308.  
  1309. ;----------------------------------------------------------------
  1310.     MONO_ENTRY
  1311. @mono1_start_1:
  1312.     TIMERD_DI
  1313.     VISUAL    1,0
  1314.     move.b    #$78,OPMADR        ;(CH1C2)TL
  1315.     move.b    #$78,mono_cur_opmadr
  1316.     mono_both_play    1,a0
  1317.     move.l    #@mono1_playloop_1,TIMERD_VECTOR
  1318.     rte
  1319.  
  1320.     mono_both_over    a0
  1321.     move.l    #@mono1_play_3,TIMERD_VECTOR
  1322.     rte
  1323.  
  1324.     MONO_ENTRY
  1325. @mono1_start_3:
  1326.     TIMERD_DI
  1327.     VISUAL    1,0
  1328.     move.b    #$7A,OPMADR        ;(CH3C2)TL
  1329.     move.b    #$7A,mono_cur_opmadr
  1330.     mono_both_play    1,a0
  1331.     move.l    #@mono1_playloop_3,TIMERD_VECTOR
  1332.     rte
  1333.  
  1334.     mono_both_over    a0
  1335.     move.l    #@mono1_play_1,TIMERD_VECTOR
  1336.     rte
  1337.  
  1338.     MONO_ENTRY
  1339. @mono1_play_1:
  1340.     TIMERD_DI
  1341.     VISUAL    1,0
  1342.     move.b    #$78,OPMADR        ;(CH1C2)TL
  1343.     move.b    #$78,mono_cur_opmadr
  1344.     mono_both_play    1,a0
  1345.     subq.w    #1,counter
  1346.     bcs    @f
  1347.     move.l    #@mono1_playloop_1,TIMERD_VECTOR
  1348.     rte
  1349. @@:    SETUP_MOVEW_IMM    MUTE_MONO_DELAY_0,counter
  1350.     move.l    #@mono1_extloop_1,TIMERD_VECTOR
  1351.     rte
  1352.  
  1353.     mono_both_over    a0
  1354.     subq.w    #1,counter
  1355.     bcs    @f
  1356.     move.l    #@mono1_play_3,TIMERD_VECTOR
  1357.     rte
  1358. @@:    move.l    #@mono1_ext_3,TIMERD_VECTOR
  1359.     rte
  1360.  
  1361.     MONO_ENTRY
  1362. @mono1_play_3:
  1363.     TIMERD_DI
  1364.     VISUAL    1,0
  1365.     move.b    #$7A,OPMADR        ;(CH3C2)TL
  1366.     move.b    #$7A,mono_cur_opmadr
  1367.     mono_both_play    1,a0
  1368.     subq.w    #1,counter
  1369.     bcs    @f
  1370.     move.l    #@mono1_playloop_3,TIMERD_VECTOR
  1371.     rte
  1372. @@:    SETUP_MOVEW_IMM    MUTE_MONO_DELAY_0,counter
  1373.     move.l    #@mono1_extloop_3,TIMERD_VECTOR
  1374.     rte
  1375.  
  1376.     mono_both_over    a0
  1377.     subq.w    #1,counter
  1378.     bcs    @f
  1379.     move.l    #@mono1_play_1,TIMERD_VECTOR
  1380.     rte
  1381. @@:    move.l    #@mono1_ext_1,TIMERD_VECTOR
  1382.     rte
  1383.  
  1384.     MONO_ENTRY
  1385. @mono1_playloop_1:
  1386.     TIMERD_DI
  1387.     VISUAL    1,0
  1388.     mono_both_play    0,a0
  1389.     subq.w    #1,counter
  1390.     bcs    @f
  1391.     rte
  1392. @@:    SETUP_MOVEW_IMM    MUTE_MONO_DELAY_0,counter
  1393.     move.l    #@mono1_extloop_1,TIMERD_VECTOR
  1394.     rte
  1395.  
  1396.     mono_both_over    a0
  1397.     subq.w    #1,counter
  1398.     bcs    @f
  1399.     move.l    #@mono1_play_3,TIMERD_VECTOR
  1400.     rte
  1401. @@:    move.l    #@mono1_ext_3,TIMERD_VECTOR
  1402.     rte
  1403.  
  1404.     MONO_ENTRY
  1405. @mono1_playloop_3:
  1406.     TIMERD_DI
  1407.     VISUAL    1,0
  1408.     mono_both_play    0,a0
  1409.     subq.w    #1,counter
  1410.     bcs    @f
  1411.     rte
  1412. @@:    SETUP_MOVEW_IMM    MUTE_MONO_DELAY_0,counter
  1413.     move.l    #@mono1_extloop_3,TIMERD_VECTOR
  1414.     rte
  1415.  
  1416.     mono_both_over    a0
  1417.     subq.w    #1,counter
  1418.     bcs    @f
  1419.     move.l    #@mono1_play_1,TIMERD_VECTOR
  1420.     rte
  1421. @@:    move.l    #@mono1_ext_1,TIMERD_VECTOR
  1422.     rte
  1423.  
  1424.     MONO_ENTRY
  1425. @mono1_ext_1:
  1426.     TIMERD_DI
  1427.     VISUAL    1,1
  1428.     move.b    #$78,OPMADR        ;(CH1C2)TL
  1429.     move.b    #$78,mono_cur_opmadr
  1430.     mono_both_play    1,a0
  1431.     SETUP_MOVEW_IMM    MUTE_MONO_DELAY_1,counter
  1432.     move.l    #@mono1_extloop_1,TIMERD_VECTOR
  1433.     rte
  1434.  
  1435.     mono_both_over    a0
  1436.     SETUP_MOVEW_IMM    INTERVAL_MONO_0,counter
  1437.     move.l    #@mono2_start_4,TIMERD_VECTOR
  1438.     rte
  1439.  
  1440.     MONO_ENTRY
  1441. @mono1_ext_3:
  1442.     TIMERD_DI
  1443.     VISUAL    1,1
  1444.     move.b    #$7A,OPMADR        ;(CH3C2)TL
  1445.     move.b    #$7A,mono_cur_opmadr
  1446.     mono_both_play    1,a0
  1447.     SETUP_MOVEW_IMM    MUTE_MONO_DELAY_1,counter
  1448.     move.l    #@mono1_extloop_3,TIMERD_VECTOR
  1449.     rte
  1450.  
  1451.     mono_both_over    a0
  1452.     SETUP_MOVEW_IMM    INTERVAL_MONO_0,counter
  1453.     move.l    #@mono2_start_2,TIMERD_VECTOR
  1454.     rte
  1455.  
  1456.     MONO_ENTRY
  1457. @mono1_extloop_1:
  1458.     TIMERD_DI
  1459.     VISUAL    1,1
  1460.     mono_both_play    0,a0
  1461.     subq.w    #1,counter
  1462.     bcs    @f
  1463.     rte
  1464. @@:    move.l    #@mono1_mute_1,TIMERD_VECTOR
  1465.     rte
  1466.  
  1467.     mono_both_over    a0
  1468.     SETUP_ADDIW_IMM    INTERVAL_MONO_2,counter
  1469.     move.l    #@mono2_start_4,TIMERD_VECTOR
  1470.     rte
  1471.  
  1472.     MONO_ENTRY
  1473. @mono1_extloop_3:
  1474.     TIMERD_DI
  1475.     VISUAL    1,1
  1476.     mono_both_play    0,a0
  1477.     subq.w    #1,counter
  1478.     bcs    @f
  1479.     rte
  1480. @@:    move.l    #@mono1_mute_3,TIMERD_VECTOR
  1481.     rte
  1482.  
  1483.     mono_both_over    a0
  1484.     SETUP_ADDIW_IMM    INTERVAL_MONO_2,counter
  1485.     move.l    #@mono2_start_2,TIMERD_VECTOR
  1486.     rte
  1487.  
  1488.     MONO_ENTRY
  1489. @mono1_mute_1:
  1490.     TIMERD_DI
  1491.     VISUAL    1,3
  1492.     move.b    #ZERO_TL,OPMDAT
  1493.     SETUP_ADDIW_IMM    INTERVAL_MONO_1,counter
  1494.     move.l    #@mono2_start_2,TIMERD_VECTOR
  1495.     rte
  1496.  
  1497.     MONO_ENTRY
  1498. @mono1_mute_3:
  1499.     TIMERD_DI
  1500.     VISUAL    1,3
  1501.     move.b    #ZERO_TL,OPMDAT
  1502.     SETUP_ADDIW_IMM    INTERVAL_MONO_1,counter
  1503.     move.l    #@mono2_start_4,TIMERD_VECTOR
  1504.     rte
  1505.  
  1506. ;----------------------------------------------------------------
  1507.     MONO_ENTRY
  1508. @mono2_start_2:
  1509.     TIMERD_DI
  1510.     VISUAL    2,0
  1511.     move.b    #$79,OPMADR        ;(CH2C2)TL
  1512.     move.b    #$79,mono_cur_opmadr
  1513.     mono_both_play    1,a0
  1514.     move.l    #@mono2_playloop_2,TIMERD_VECTOR
  1515.     rte
  1516.  
  1517.     mono_both_over    a0
  1518.     move.l    #@mono2_play_4,TIMERD_VECTOR
  1519.     rte
  1520.  
  1521.     MONO_ENTRY
  1522. @mono2_start_4:
  1523.     TIMERD_DI
  1524.     VISUAL    2,0
  1525.     move.b    #$7B,OPMADR        ;(CH4C2)TL
  1526.     move.b    #$7B,mono_cur_opmadr
  1527.     mono_both_play    1,a0
  1528.     move.l    #@mono2_playloop_4,TIMERD_VECTOR
  1529.     rte
  1530.  
  1531.     mono_both_over    a0
  1532.     move.l    #@mono2_play_2,TIMERD_VECTOR
  1533.     rte
  1534.  
  1535.     MONO_ENTRY
  1536. @mono2_play_2:
  1537.     TIMERD_DI
  1538.     VISUAL    2,0
  1539.     move.b    #$79,OPMADR        ;(CH2C2)TL
  1540.     move.b    #$79,mono_cur_opmadr
  1541.     mono_both_play    1,a0
  1542.     subq.w    #1,counter
  1543.     bcs    @f
  1544.     move.l    #@mono2_playloop_2,TIMERD_VECTOR
  1545.     rte
  1546. @@:    SETUP_MOVEW_IMM    MUTE_MONO_DELAY_0,counter
  1547.     move.l    #@mono2_extloop_2,TIMERD_VECTOR
  1548.     rte
  1549.  
  1550.     mono_both_over    a0
  1551.     subq.w    #1,counter
  1552.     bcs    @f
  1553.     move.l    #@mono2_play_4,TIMERD_VECTOR
  1554.     rte
  1555. @@:    move.l    #@mono2_ext_4,TIMERD_VECTOR
  1556.     rte
  1557.  
  1558.     MONO_ENTRY
  1559. @mono2_play_4:
  1560.     TIMERD_DI
  1561.     VISUAL    2,0
  1562.     move.b    #$7B,OPMADR        ;(CH4C2)TL
  1563.     move.b    #$7B,mono_cur_opmadr
  1564.     mono_both_play    1,a0
  1565.     subq.w    #1,counter
  1566.     bcs    @f
  1567.     move.l    #@mono2_playloop_4,TIMERD_VECTOR
  1568.     rte
  1569. @@:    SETUP_MOVEW_IMM    MUTE_MONO_DELAY_0,counter
  1570.     move.l    #@mono2_extloop_4,TIMERD_VECTOR
  1571.     rte
  1572.  
  1573.     mono_both_over    a0
  1574.     subq.w    #1,counter
  1575.     bcs    @f
  1576.     move.l    #@mono2_play_2,TIMERD_VECTOR
  1577.     rte
  1578. @@:    move.l    #@mono2_ext_2,TIMERD_VECTOR
  1579.     rte
  1580.  
  1581.     MONO_ENTRY
  1582. @mono2_playloop_2:
  1583.     TIMERD_DI
  1584.     VISUAL    2,0
  1585.     mono_both_play    0,a0
  1586.     subq.w    #1,counter
  1587.     bcs    @f
  1588.     rte
  1589. @@:    SETUP_MOVEW_IMM    MUTE_MONO_DELAY_0,counter
  1590.     move.l    #@mono2_extloop_2,TIMERD_VECTOR
  1591.     rte
  1592.  
  1593.     mono_both_over    a0
  1594.     subq.w    #1,counter
  1595.     bcs    @f
  1596.     move.l    #@mono2_play_4,TIMERD_VECTOR
  1597.     rte
  1598. @@:    move.l    #@mono2_ext_4,TIMERD_VECTOR
  1599.     rte
  1600.  
  1601.     MONO_ENTRY
  1602. @mono2_playloop_4:
  1603.     TIMERD_DI
  1604.     VISUAL    2,0
  1605.     mono_both_play    0,a0
  1606.     subq.w    #1,counter
  1607.     bcs    @f
  1608.     rte
  1609. @@:    SETUP_MOVEW_IMM    MUTE_MONO_DELAY_0,counter
  1610.     move.l    #@mono2_extloop_4,TIMERD_VECTOR
  1611.     rte
  1612.  
  1613.     mono_both_over    a0
  1614.     subq.w    #1,counter
  1615.     bcs    @f
  1616.     move.l    #@mono2_play_2,TIMERD_VECTOR
  1617.     rte
  1618. @@:    move.l    #@mono2_ext_2,TIMERD_VECTOR
  1619.     rte
  1620.  
  1621.     MONO_ENTRY
  1622. @mono2_ext_2:
  1623.     TIMERD_DI
  1624.     VISUAL    2,1
  1625.     move.b    #$79,OPMADR        ;(CH2C2)TL
  1626.     move.b    #$79,mono_cur_opmadr
  1627.     mono_both_play    1,a0
  1628.     SETUP_MOVEW_IMM    MUTE_MONO_DELAY_1,counter
  1629.     move.l    #@mono2_extloop_2,TIMERD_VECTOR
  1630.     rte
  1631.  
  1632.     mono_both_over    a0
  1633.     SETUP_MOVEW_IMM    INTERVAL_MONO_0,counter
  1634.     move.l    #@mono3_start_1,TIMERD_VECTOR
  1635.     rte
  1636.  
  1637.     MONO_ENTRY
  1638. @mono2_ext_4:
  1639.     TIMERD_DI
  1640.     VISUAL    2,1
  1641.     move.b    #$7B,OPMADR        ;(CH4C2)TL
  1642.     move.b    #$7B,mono_cur_opmadr
  1643.     mono_both_play    1,a0
  1644.     SETUP_MOVEW_IMM    MUTE_MONO_DELAY_1,counter
  1645.     move.l    #@mono2_extloop_4,TIMERD_VECTOR
  1646.     rte
  1647.  
  1648.     mono_both_over    a0
  1649.     SETUP_MOVEW_IMM    INTERVAL_MONO_0,counter
  1650.     move.l    #@mono3_start_3,TIMERD_VECTOR
  1651.     rte
  1652.  
  1653.     MONO_ENTRY
  1654. @mono2_extloop_2:
  1655.     TIMERD_DI
  1656.     VISUAL    2,1
  1657.     mono_both_play    0,a0
  1658.     subq.w    #1,counter
  1659.     bcs    @f
  1660.     rte
  1661. @@:    move.l    #@mono2_mute_2,TIMERD_VECTOR
  1662.     rte
  1663.  
  1664.     mono_both_over    a0
  1665.     SETUP_ADDIW_IMM    INTERVAL_MONO_2,counter
  1666.     move.l    #@mono3_start_1,TIMERD_VECTOR
  1667.     rte
  1668.  
  1669.     MONO_ENTRY
  1670. @mono2_extloop_4:
  1671.     TIMERD_DI
  1672.     VISUAL    2,1
  1673.     mono_both_play    0,a0
  1674.     subq.w    #1,counter
  1675.     bcs    @f
  1676.     rte
  1677. @@:    move.l    #@mono2_mute_4,TIMERD_VECTOR
  1678.     rte
  1679.  
  1680.     mono_both_over    a0
  1681.     SETUP_ADDIW_IMM    INTERVAL_MONO_2,counter
  1682.     move.l    #@mono3_start_3,TIMERD_VECTOR
  1683.     rte
  1684.  
  1685.     MONO_ENTRY
  1686. @mono2_mute_2:
  1687.     TIMERD_DI
  1688.     VISUAL    2,3
  1689.     move.b    #ZERO_TL,OPMDAT
  1690.     SETUP_ADDIW_IMM    INTERVAL_MONO_1,counter
  1691.     move.l    #@mono3_start_3,TIMERD_VECTOR
  1692.     rte
  1693.  
  1694.     MONO_ENTRY
  1695. @mono2_mute_4:
  1696.     TIMERD_DI
  1697.     VISUAL    2,3
  1698.     move.b    #ZERO_TL,OPMDAT
  1699.     SETUP_ADDIW_IMM    INTERVAL_MONO_1,counter
  1700.     move.l    #@mono3_start_1,TIMERD_VECTOR
  1701.     rte
  1702.  
  1703. ;----------------------------------------------------------------
  1704.     MONO_ENTRY
  1705. @mono3_start_3:
  1706.     TIMERD_DI
  1707.     VISUAL    3,0
  1708.     move.b    #$7A,OPMADR        ;(CH3C2)TL
  1709.     move.b    #$7A,mono_cur_opmadr
  1710.     mono_both_play    1,a0
  1711.     move.l    #@mono3_playloop_3,TIMERD_VECTOR
  1712.     rte
  1713.  
  1714.     mono_both_over    a0
  1715.     move.l    #@mono3_play_1,TIMERD_VECTOR
  1716.     rte
  1717.  
  1718.     MONO_ENTRY
  1719. @mono3_start_1:
  1720.     TIMERD_DI
  1721.     VISUAL    3,0
  1722.     move.b    #$78,OPMADR        ;(CH1C2)TL
  1723.     move.b    #$78,mono_cur_opmadr
  1724.     mono_both_play    1,a0
  1725.     move.l    #@mono3_playloop_1,TIMERD_VECTOR
  1726.     rte
  1727.  
  1728.     mono_both_over    a0
  1729.     move.l    #@mono3_play_3,TIMERD_VECTOR
  1730.     rte
  1731.  
  1732.     MONO_ENTRY
  1733. @mono3_play_3:
  1734.     TIMERD_DI
  1735.     VISUAL    3,0
  1736.     move.b    #$7A,OPMADR        ;(CH3C2)TL
  1737.     move.b    #$7A,mono_cur_opmadr
  1738.     mono_both_play    1,a0
  1739.     subq.w    #1,counter
  1740.     bcs    @f
  1741.     move.l    #@mono3_playloop_3,TIMERD_VECTOR
  1742.     rte
  1743. @@:    SETUP_MOVEW_IMM    MUTE_MONO_DELAY_0,counter
  1744.     move.l    #@mono3_extloop_3,TIMERD_VECTOR
  1745.     rte
  1746.  
  1747.     mono_both_over    a0
  1748.     subq.w    #1,counter
  1749.     bcs    @f
  1750.     move.l    #@mono3_play_1,TIMERD_VECTOR
  1751.     rte
  1752. @@:    move.l    #@mono3_ext_1,TIMERD_VECTOR
  1753.     rte
  1754.  
  1755.     MONO_ENTRY
  1756. @mono3_play_1:
  1757.     TIMERD_DI
  1758.     VISUAL    3,0
  1759.     move.b    #$78,OPMADR        ;(CH1C2)TL
  1760.     move.b    #$78,mono_cur_opmadr
  1761.     mono_both_play    1,a0
  1762.     subq.w    #1,counter
  1763.     bcs    @f
  1764.     move.l    #@mono3_playloop_1,TIMERD_VECTOR
  1765.     rte
  1766. @@:    SETUP_MOVEW_IMM    MUTE_MONO_DELAY_0,counter
  1767.     move.l    #@mono3_extloop_1,TIMERD_VECTOR
  1768.     rte
  1769.  
  1770.     mono_both_over    a0
  1771.     subq.w    #1,counter
  1772.     bcs    @f
  1773.     move.l    #@mono3_play_3,TIMERD_VECTOR
  1774.     rte
  1775. @@:    move.l    #@mono3_ext_3,TIMERD_VECTOR
  1776.     rte
  1777.  
  1778.     MONO_ENTRY
  1779. @mono3_playloop_3:
  1780.     TIMERD_DI
  1781.     VISUAL    3,0
  1782.     mono_both_play    0,a0
  1783.     subq.w    #1,counter
  1784.     bcs    @f
  1785.     rte
  1786. @@:    SETUP_MOVEW_IMM    MUTE_MONO_DELAY_0,counter
  1787.     move.l    #@mono3_extloop_3,TIMERD_VECTOR
  1788.     rte
  1789.  
  1790.     mono_both_over    a0
  1791.     subq.w    #1,counter
  1792.     bcs    @f
  1793.     move.l    #@mono3_play_1,TIMERD_VECTOR
  1794.     rte
  1795. @@:    move.l    #@mono3_ext_1,TIMERD_VECTOR
  1796.     rte
  1797.  
  1798.     MONO_ENTRY
  1799. @mono3_playloop_1:
  1800.     TIMERD_DI
  1801.     VISUAL    3,0
  1802.     mono_both_play    0,a0
  1803.     subq.w    #1,counter
  1804.     bcs    @f
  1805.     rte
  1806. @@:    SETUP_MOVEW_IMM    MUTE_MONO_DELAY_0,counter
  1807.     move.l    #@mono3_extloop_1,TIMERD_VECTOR
  1808.     rte
  1809.  
  1810.     mono_both_over    a0
  1811.     subq.w    #1,counter
  1812.     bcs    @f
  1813.     move.l    #@mono3_play_3,TIMERD_VECTOR
  1814.     rte
  1815. @@:    move.l    #@mono3_ext_3,TIMERD_VECTOR
  1816.     rte
  1817.  
  1818.     MONO_ENTRY
  1819. @mono3_ext_3:
  1820.     TIMERD_DI
  1821.     VISUAL    3,1
  1822.     move.b    #$7A,OPMADR        ;(CH3C2)TL
  1823.     move.b    #$7A,mono_cur_opmadr
  1824.     mono_both_play    1,a0
  1825.     SETUP_MOVEW_IMM    MUTE_MONO_DELAY_1,counter
  1826.     move.l    #@mono3_extloop_3,TIMERD_VECTOR
  1827.     rte
  1828.  
  1829.     mono_both_over    a0
  1830.     SETUP_MOVEW_IMM    INTERVAL_MONO_LAST_0,counter
  1831.     move.l    #@mono4_start_2,TIMERD_VECTOR
  1832.     rte
  1833.  
  1834.     MONO_ENTRY
  1835. @mono3_ext_1:
  1836.     TIMERD_DI
  1837.     VISUAL    3,1
  1838.     move.b    #$78,OPMADR        ;(CH1C2)TL
  1839.     move.b    #$78,mono_cur_opmadr
  1840.     mono_both_play    1,a0
  1841.     SETUP_MOVEW_IMM    MUTE_MONO_DELAY_1,counter
  1842.     move.l    #@mono3_extloop_1,TIMERD_VECTOR
  1843.     rte
  1844.  
  1845.     mono_both_over    a0
  1846.     SETUP_MOVEW_IMM    INTERVAL_MONO_LAST_0,counter
  1847.     move.l    #@mono4_start_4,TIMERD_VECTOR
  1848.     rte
  1849.  
  1850.     MONO_ENTRY
  1851. @mono3_extloop_3:
  1852.     TIMERD_DI
  1853.     VISUAL    3,1
  1854.     mono_both_play    0,a0
  1855.     subq.w    #1,counter
  1856.     bcs    @f
  1857.     rte
  1858. @@:    move.l    #@mono3_mute_3,TIMERD_VECTOR
  1859.     rte
  1860.  
  1861.     mono_both_over    a0
  1862.     SETUP_ADDIW_IMM    INTERVAL_MONO_LAST_2,counter
  1863.     move.l    #@mono4_start_2,TIMERD_VECTOR
  1864.     rte
  1865.  
  1866.     MONO_ENTRY
  1867. @mono3_extloop_1:
  1868.     TIMERD_DI
  1869.     VISUAL    3,1
  1870.     mono_both_play    0,a0
  1871.     subq.w    #1,counter
  1872.     bcs    @f
  1873.     rte
  1874. @@:    move.l    #@mono3_mute_1,TIMERD_VECTOR
  1875.     rte
  1876.  
  1877.     mono_both_over    a0
  1878.     SETUP_ADDIW_IMM    INTERVAL_MONO_LAST_2,counter
  1879.     move.l    #@mono4_start_4,TIMERD_VECTOR
  1880.     rte
  1881.  
  1882.     MONO_ENTRY
  1883. @mono3_mute_3:
  1884.     TIMERD_DI
  1885.     VISUAL    3,3
  1886.     move.b    #ZERO_TL,OPMDAT
  1887.     SETUP_ADDIW_IMM    INTERVAL_MONO_LAST_1,counter
  1888.     move.l    #@mono4_start_4,TIMERD_VECTOR
  1889.     rte
  1890.  
  1891.     MONO_ENTRY
  1892. @mono3_mute_1:
  1893.     TIMERD_DI
  1894.     VISUAL    3,3
  1895.     move.b    #ZERO_TL,OPMDAT
  1896.     SETUP_ADDIW_IMM    INTERVAL_MONO_LAST_1,counter
  1897.     move.l    #@mono4_start_2,TIMERD_VECTOR
  1898.     rte
  1899.  
  1900. ;----------------------------------------------------------------
  1901.     MONO_ENTRY
  1902. @mono4_start_4:
  1903.     TIMERD_DI
  1904.     VISUAL    4,0
  1905.     move.b    #$7B,OPMADR        ;(CH4C2)TL
  1906.     move.b    #$7B,mono_cur_opmadr
  1907.     mono_both_play    1,a0
  1908.     move.l    #@mono4_playloop_4,TIMERD_VECTOR
  1909.     rte
  1910.  
  1911.     mono_both_over    a0
  1912.     move.l    #@mono4_play_2,TIMERD_VECTOR
  1913.     rte
  1914.  
  1915.     MONO_ENTRY
  1916. @mono4_start_2:
  1917.     TIMERD_DI
  1918.     VISUAL    4,0
  1919.     move.b    #$79,OPMADR        ;(CH2C2)TL
  1920.     move.b    #$79,mono_cur_opmadr
  1921.     mono_both_play    1,a0
  1922.     move.l    #@mono4_playloop_2,TIMERD_VECTOR
  1923.     rte
  1924.  
  1925.     mono_both_over    a0
  1926.     move.l    #@mono4_play_4,TIMERD_VECTOR
  1927.     rte
  1928.  
  1929.     MONO_ENTRY
  1930. @mono4_play_4:
  1931.     TIMERD_DI
  1932.     VISUAL    4,0
  1933.     move.b    #$7B,OPMADR        ;(CH4C2)TL
  1934.     move.b    #$7B,mono_cur_opmadr
  1935.     mono_both_play    1,a0
  1936.     subq.w    #1,counter
  1937.     bcs    @f
  1938.     move.l    #@mono4_playloop_4,TIMERD_VECTOR
  1939.     rte
  1940. @@:    move.l    #@mono4_lastloop_4,TIMERD_VECTOR
  1941.     rte
  1942.  
  1943.     mono_both_over    a0
  1944.     subq.w    #1,counter
  1945.     bcs    @f
  1946.     move.l    #@mono4_play_2,TIMERD_VECTOR
  1947.     rte
  1948. @@:    move.l    #@mono4_last_2,TIMERD_VECTOR
  1949.     rte
  1950.  
  1951.     MONO_ENTRY
  1952. @mono4_play_2:
  1953.     TIMERD_DI
  1954.     VISUAL    4,0
  1955.     move.b    #$79,OPMADR        ;(CH2C2)TL
  1956.     move.b    #$79,mono_cur_opmadr
  1957.     mono_both_play    1,a0
  1958.     subq.w    #1,counter
  1959.     bcs    @f
  1960.     move.l    #@mono4_playloop_2,TIMERD_VECTOR
  1961.     rte
  1962. @@:    move.l    #@mono4_lastloop_2,TIMERD_VECTOR
  1963.     rte
  1964.  
  1965.     mono_both_over    a0
  1966.     subq.w    #1,counter
  1967.     bcs    @f
  1968.     move.l    #@mono4_play_4,TIMERD_VECTOR
  1969.     rte
  1970. @@:    move.l    #@mono4_last_4,TIMERD_VECTOR
  1971.     rte
  1972.  
  1973.     MONO_ENTRY
  1974. @mono4_playloop_4:
  1975.     TIMERD_DI
  1976.     VISUAL    4,0
  1977.     mono_both_play    0,a0
  1978.     subq.w    #1,counter
  1979.     bcs    @f
  1980.     rte
  1981. @@:    move.l    #@mono4_lastloop_4,TIMERD_VECTOR
  1982.     rte
  1983.  
  1984.     mono_both_over    a0
  1985.     subq.w    #1,counter
  1986.     bcs    @f
  1987.     move.l    #@mono4_play_2,TIMERD_VECTOR
  1988.     rte
  1989. @@:    move.l    #@mono4_last_2,TIMERD_VECTOR
  1990.     rte
  1991.  
  1992.     MONO_ENTRY
  1993. @mono4_playloop_2:
  1994.     TIMERD_DI
  1995.     VISUAL    4,0
  1996.     mono_both_play    0,a0
  1997.     subq.w    #1,counter
  1998.     bcs    @f
  1999.     rte
  2000. @@:    move.l    #@mono4_lastloop_2,TIMERD_VECTOR
  2001.     rte
  2002.  
  2003.     mono_both_over    a0
  2004.     subq.w    #1,counter
  2005.     bcs    @f
  2006.     move.l    #@mono4_play_4,TIMERD_VECTOR
  2007.     rte
  2008. @@:    move.l    #@mono4_last_4,TIMERD_VECTOR
  2009.     rte
  2010.  
  2011.     MONO_ENTRY
  2012. @mono4_last_4:
  2013.     TIMERD_DI
  2014.     VISUAL    4,0
  2015.     move.b    #$7B,OPMADR        ;(CH4C2)TL
  2016.     move.b    #$7B,mono_cur_opmadr
  2017.     mono_both_play    1,a0
  2018.     DELTA_CHECK
  2019.     move.l    #@mono4_lastloop_4,TIMERD_VECTOR
  2020.     rte
  2021.     DELTA_OVER
  2022.     SETUP_MOVEW_IMM    MUTE_MONO_DELAY_0,counter
  2023.     move.l    #@mono4_extloop_4,TIMERD_VECTOR
  2024.     rte
  2025.  
  2026.     mono_both_over    a0
  2027.     DELTA_CHECK
  2028.     move.l    #@mono4_last_2,TIMERD_VECTOR
  2029.     rte
  2030.     DELTA_OVER
  2031.     move.l    #@mono4_ext_2,TIMERD_VECTOR
  2032.     rte
  2033.  
  2034.     MONO_ENTRY
  2035. @mono4_last_2:
  2036.     TIMERD_DI
  2037.     VISUAL    4,0
  2038.     move.b    #$79,OPMADR        ;(CH2C2)TL
  2039.     move.b    #$79,mono_cur_opmadr
  2040.     mono_both_play    1,a0
  2041.     DELTA_CHECK
  2042.     move.l    #@mono4_lastloop_2,TIMERD_VECTOR
  2043.     rte
  2044.     DELTA_OVER
  2045.     SETUP_MOVEW_IMM    MUTE_MONO_DELAY_0,counter
  2046.     move.l    #@mono4_extloop_2,TIMERD_VECTOR
  2047.     rte
  2048.  
  2049.     mono_both_over    a0
  2050.     DELTA_CHECK
  2051.     move.l    #@mono4_last_4,TIMERD_VECTOR
  2052.     rte
  2053.     DELTA_OVER
  2054.     move.l    #@mono4_ext_4,TIMERD_VECTOR
  2055.     rte
  2056.  
  2057.     MONO_ENTRY
  2058. @mono4_lastloop_4:
  2059.     TIMERD_DI
  2060.     VISUAL    4,0
  2061.     mono_both_play    0,a0
  2062.     DELTA_CHECK
  2063.     rte
  2064.     DELTA_OVER
  2065.     SETUP_MOVEW_IMM    MUTE_MONO_DELAY_0,counter
  2066.     move.l    #@mono4_extloop_4,TIMERD_VECTOR
  2067.     rte
  2068.  
  2069.     mono_both_over    a0
  2070.     DELTA_CHECK
  2071.     move.l    #@mono4_last_2,TIMERD_VECTOR
  2072.     rte
  2073.     DELTA_OVER
  2074.     move.l    #@mono4_ext_2,TIMERD_VECTOR
  2075.     rte
  2076.  
  2077.     MONO_ENTRY
  2078. @mono4_lastloop_2:
  2079.     TIMERD_DI
  2080.     VISUAL    4,0
  2081.     mono_both_play    0,a0
  2082.     DELTA_CHECK
  2083.     rte
  2084.     DELTA_OVER
  2085.     SETUP_MOVEW_IMM    MUTE_MONO_DELAY_0,counter
  2086.     move.l    #@mono4_extloop_2,TIMERD_VECTOR
  2087.     rte
  2088.  
  2089.     mono_both_over    a0
  2090.     DELTA_CHECK
  2091.     move.l    #@mono4_last_4,TIMERD_VECTOR
  2092.     rte
  2093.     DELTA_OVER
  2094.     move.l    #@mono4_ext_4,TIMERD_VECTOR
  2095.     rte
  2096.  
  2097.     MONO_ENTRY
  2098. @mono4_ext_4:
  2099.     TIMERD_DI
  2100.     VISUAL    4,1
  2101.     move.b    #$7B,OPMADR        ;(CH4C2)TL
  2102.     move.b    #$7B,mono_cur_opmadr
  2103.     mono_both_play    1,a0
  2104.     SETUP_MOVEW_IMM    MUTE_MONO_DELAY_1,counter
  2105.     move.l    #@mono4_extloop_4,TIMERD_VECTOR
  2106.     rte
  2107.  
  2108.     mono_both_over    a0
  2109.     SETUP_MOVEW_IMM    INTERVAL_MONO_0,counter
  2110.     move.l    #@mono1_start_3,TIMERD_VECTOR
  2111.     rte
  2112.  
  2113.     MONO_ENTRY
  2114. @mono4_ext_2:
  2115.     TIMERD_DI
  2116.     VISUAL    4,1
  2117.     move.b    #$79,OPMADR        ;(CH2C2)TL
  2118.     move.b    #$79,mono_cur_opmadr
  2119.     mono_both_play    1,a0
  2120.     SETUP_MOVEW_IMM    MUTE_MONO_DELAY_1,counter
  2121.     move.l    #@mono4_extloop_2,TIMERD_VECTOR
  2122.     rte
  2123.  
  2124.     mono_both_over    a0
  2125.     SETUP_MOVEW_IMM    INTERVAL_MONO_0,counter
  2126.     move.l    #@mono1_start_1,TIMERD_VECTOR
  2127.     rte
  2128.  
  2129.     MONO_ENTRY
  2130. @mono4_extloop_4:
  2131.     TIMERD_DI
  2132.     VISUAL    4,1
  2133.     mono_both_play    0,a0
  2134.     subq.w    #1,counter
  2135.     bcs    @f
  2136.     rte
  2137. @@:    move.l    #@mono4_mute_4,TIMERD_VECTOR
  2138.     rte
  2139.  
  2140.     mono_both_over    a0
  2141.     SETUP_ADDIW_IMM    INTERVAL_MONO_2,counter
  2142.     move.l    #@mono1_start_3,TIMERD_VECTOR
  2143.     rte
  2144.  
  2145.     MONO_ENTRY
  2146. @mono4_extloop_2:
  2147.     TIMERD_DI
  2148.     VISUAL    4,1
  2149.     mono_both_play    0,a0
  2150.     subq.w    #1,counter
  2151.     bcs    @f
  2152.     rte
  2153. @@:    move.l    #@mono4_mute_2,TIMERD_VECTOR
  2154.     rte
  2155.  
  2156.     mono_both_over    a0
  2157.     SETUP_ADDIW_IMM    INTERVAL_MONO_2,counter
  2158.     move.l    #@mono1_start_1,TIMERD_VECTOR
  2159.     rte
  2160.  
  2161.     MONO_ENTRY
  2162. @mono4_mute_4:
  2163.     TIMERD_DI
  2164.     VISUAL    4,3
  2165.     move.b    #ZERO_TL,OPMDAT
  2166.     SETUP_ADDIW_IMM    INTERVAL_MONO_1,counter
  2167.     move.l    #@mono1_start_1,TIMERD_VECTOR
  2168.     rte
  2169.  
  2170.     MONO_ENTRY
  2171. @mono4_mute_2:
  2172.     TIMERD_DI
  2173.     VISUAL    4,3
  2174.     move.b    #ZERO_TL,OPMDAT
  2175.     SETUP_ADDIW_IMM    INTERVAL_MONO_1,counter
  2176.     move.l    #@mono1_start_3,TIMERD_VECTOR
  2177.     rte
  2178.  
  2179. ;----------------------------------------------------------------
  2180.     .endm
  2181.  
  2182. ;----------------------------------------------------------------
  2183. ;変換済みデータをステレオ再生
  2184. ;----------------------------------------------------------------
  2185. stereo_body    .macro
  2186.     .text
  2187.     .even
  2188. ;----------------------------------------------------------------
  2189.     KEYON_ENTRY
  2190. @stereo_keyon1:
  2191.     DI
  2192.     move.b    #%0_1_1_1_1_000,OPMDAT    ;C2=1,M2=1,C1=1,M1=1(CH1)
  2193.     move.l    #@stereo_keyon5,TIMERD_VECTOR
  2194.     rte
  2195.  
  2196.     KEYON_ENTRY
  2197. @stereo_keyon5:
  2198.     DI
  2199.     move.b    #%0_1_1_1_1_100,OPMDAT    ;C2=1,M2=1,C1=1,M1=1(CH5)
  2200.     move.w    #KEYON_INTERVAL1-2-1,counter
  2201.     move.l    #@stereo_phase1to2,TIMERD_VECTOR
  2202.     rte
  2203.  
  2204.     KEYON_ENTRY
  2205. @stereo_phase1to2:
  2206.     DI
  2207.     subq.w    #1,counter
  2208.     bcs    @f
  2209.     rte
  2210. @@:    move.l    #@stereo_keyon2,TIMERD_VECTOR
  2211.     rte
  2212.  
  2213. ;----------------------------------------------------------------
  2214.     KEYON_ENTRY
  2215. @stereo_keyon2:
  2216.     DI
  2217.     move.b    #%0_1_1_1_1_001,OPMDAT    ;C2=1,M2=1,C1=1,M1=1(CH2)
  2218.     move.l    #@stereo_keyon6,TIMERD_VECTOR
  2219.     rte
  2220.  
  2221.     KEYON_ENTRY
  2222. @stereo_keyon6:
  2223.     DI
  2224.     move.b    #%0_1_1_1_1_101,OPMDAT    ;C2=1,M2=1,C1=1,M1=1(CH6)
  2225.     move.w    #KEYON_INTERVAL2-2-1,counter
  2226.     move.l    #@stereo_phase2to3,TIMERD_VECTOR
  2227.     rte
  2228.  
  2229.     KEYON_ENTRY
  2230. @stereo_phase2to3:
  2231.     DI
  2232.     subq.w    #1,counter
  2233.     bcs    @f
  2234.     rte
  2235. @@:    move.l    #@stereo_keyon3,TIMERD_VECTOR
  2236.     rte
  2237.  
  2238. ;----------------------------------------------------------------
  2239.     KEYON_ENTRY
  2240. @stereo_keyon3:
  2241.     DI
  2242.     move.b    #%0_1_1_1_1_010,OPMDAT    ;C2=1,M2=1,C1=1,M1=1(CH3)
  2243.     move.l    #@stereo_keyon7,TIMERD_VECTOR
  2244.     rte
  2245.  
  2246.     KEYON_ENTRY
  2247. @stereo_keyon7:
  2248.     DI
  2249.     move.b    #%0_1_1_1_1_110,OPMDAT    ;C2=1,M2=1,C1=1,M1=1(CH7)
  2250.     move.w    #KEYON_INTERVAL3-2-1,counter
  2251.     move.l    #@stereo_phase3to4,TIMERD_VECTOR
  2252.     rte
  2253.  
  2254.     KEYON_ENTRY
  2255. @stereo_phase3to4:
  2256.     DI
  2257.     subq.w    #1,counter
  2258.     bcs    @f
  2259.     rte
  2260. @@:    move.l    #@stereo_keyon4,TIMERD_VECTOR
  2261.     rte
  2262.  
  2263. ;----------------------------------------------------------------
  2264.     KEYON_ENTRY
  2265. @stereo_keyon4:
  2266.     DI
  2267.     move.b    #%0_1_1_1_1_011,OPMDAT    ;C2=1,M2=1,C1=1,M1=1(CH4)
  2268.     move.l    #@stereo_keyon8,TIMERD_VECTOR
  2269.     rte
  2270.  
  2271.     KEYON_ENTRY
  2272. @stereo_keyon8:
  2273.     DI
  2274.     move.b    #%0_1_1_1_1_111,OPMDAT    ;C2=1,M2=1,C1=1,M1=1(CH8)
  2275.     move.w    #KEYON_INTERVAL4-2-1,counter
  2276.     move.l    #@stereo_phase4to1,TIMERD_VECTOR
  2277.     rte
  2278.  
  2279.     KEYON_ENTRY
  2280. @stereo_phase4to1:
  2281.     DI
  2282.     subq.w    #1,counter
  2283.     bcs    @f
  2284.     rte
  2285. @@:    SETUP_MOVEW_IMM    STANDBY_DELAY_0,counter
  2286.     move.l    #@stereo_standby,TIMERD_VECTOR
  2287.     move.b    timerd_count,TDDR    ;TIMERD割り込み間隔を変更する
  2288.     rte
  2289.  
  2290.     KEYON_ENTRY
  2291. @stereo_standby:
  2292.     TIMERD_DI
  2293.     subq.w    #1,counter
  2294.     bcs    @f
  2295.     rte
  2296. @@:    move.b    #0,TCDR            ;TIMERCカウンタ初期化
  2297.     move.w    #(-DELTA_TIMERC).and.$FFFF,delta_timerc
  2298.     SETUP_MOVEW_IMM    INTERVAL_STEREO_0,counter
  2299.     move.l    #@stereo1_play_15,TIMERD_VECTOR
  2300.     rte
  2301.  
  2302. ;----------------------------------------------------------------
  2303. ;カウンタがオーバーフローするまでleft,rightの順に交互に出力する
  2304. ;スピードレートの調整はleftのみで行う
  2305. ;スピードレートの調整に伴うデータの採取の延期はleft/right共に1データ分
  2306. ;カウントはrightのみで行う
  2307.  
  2308. ;データにない0を挟んだ直後は必ず発音する
  2309.     STEREO_ENTRY
  2310. @stereo1_start_15:
  2311.     TIMERD_DI
  2312.     VISUAL    1,0
  2313.     stereo_left_play    $78,a0    ;(CH1C2)TL
  2314.     move.l    #@stereo1_play_51,TIMERD_VECTOR
  2315.     rte
  2316.  
  2317.     stereo_left_over    a0
  2318.     move.l    #@stereo1_play_53,TIMERD_VECTOR
  2319.     rte
  2320.  
  2321.     STEREO_ENTRY
  2322. @stereo1_start_35:
  2323.     TIMERD_DI
  2324.     VISUAL    1,0
  2325.     stereo_left_play    $7A,a0    ;(CH3C2)TL
  2326.     move.l    #@stereo1_play_53,TIMERD_VECTOR
  2327.     rte
  2328.  
  2329.     stereo_left_over    a0
  2330.     move.l    #@stereo1_play_51,TIMERD_VECTOR
  2331.     rte
  2332.  
  2333.     STEREO_ENTRY
  2334. @stereo1_start_17:
  2335.     TIMERD_DI
  2336.     VISUAL    1,0
  2337.     stereo_left_play    $78,a0    ;(CH1C2)TL
  2338.     move.l    #@stereo1_play_71,TIMERD_VECTOR
  2339.     rte
  2340.  
  2341.     stereo_left_over    a0
  2342.     move.l    #@stereo1_play_73,TIMERD_VECTOR
  2343.     rte
  2344.  
  2345.     STEREO_ENTRY
  2346. @stereo1_start_37:
  2347.     TIMERD_DI
  2348.     VISUAL    1,0
  2349.     stereo_left_play    $7A,a0    ;(CH3C2)TL
  2350.     move.l    #@stereo1_play_73,TIMERD_VECTOR
  2351.     rte
  2352.  
  2353.     stereo_left_over    a0
  2354.     move.l    #@stereo1_play_71,TIMERD_VECTOR
  2355.     rte
  2356.  
  2357.     STEREO_ENTRY
  2358. @stereo1_play_15:
  2359.     TIMERD_DI
  2360.     VISUAL    1,0
  2361.     stereo_left_play    $78,a0    ;(CH1C2)TL
  2362.     move.l    #@stereo1_play_51,TIMERD_VECTOR
  2363.     rte
  2364.  
  2365.     stereo_left_over    a0
  2366.     move.l    #@stereo1_play_53,TIMERD_VECTOR
  2367.     rte
  2368.  
  2369.     STEREO_ENTRY
  2370. @stereo1_play_35:
  2371.     TIMERD_DI
  2372.     VISUAL    1,0
  2373.     stereo_left_play    $7A,a0    ;(CH3C2)TL
  2374.     move.l    #@stereo1_play_53,TIMERD_VECTOR
  2375.     rte
  2376.  
  2377.     stereo_left_over    a0
  2378.     move.l    #@stereo1_play_51,TIMERD_VECTOR
  2379.     rte
  2380.  
  2381.     STEREO_ENTRY
  2382. @stereo1_play_17:
  2383.     TIMERD_DI
  2384.     VISUAL    1,0
  2385.     stereo_left_play    $78,a0    ;(CH1C2)TL
  2386.     move.l    #@stereo1_play_71,TIMERD_VECTOR
  2387.     rte
  2388.  
  2389.     stereo_left_over    a0
  2390.     move.l    #@stereo1_play_73,TIMERD_VECTOR
  2391.     rte
  2392.  
  2393.     STEREO_ENTRY
  2394. @stereo1_play_37:
  2395.     TIMERD_DI
  2396.     VISUAL    1,0
  2397.     stereo_left_play    $7A,a0    ;(CH3C2)TL
  2398.     move.l    #@stereo1_play_73,TIMERD_VECTOR
  2399.     rte
  2400.  
  2401.     stereo_left_over    a0
  2402.     move.l    #@stereo1_play_71,TIMERD_VECTOR
  2403.     rte
  2404.  
  2405.     STEREO_ENTRY
  2406. @stereo1_play_51:
  2407.     TIMERD_DI
  2408.     VISUAL    1,0
  2409.     stereo_right_play    $7C,a0    ;(CH5C2)TL
  2410.     subq.w    #1,counter
  2411.     bcs    @f
  2412.     move.l    #@stereo1_play_15,TIMERD_VECTOR
  2413.     rte
  2414. @@:    SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  2415.     move.l    #@stereo1_ext_15,TIMERD_VECTOR
  2416.     rte
  2417.  
  2418.     stereo_right_over    a0
  2419.     subq.w    #1,counter
  2420.     bcs    @f
  2421.     move.l    #@stereo1_play_17,TIMERD_VECTOR
  2422.     rte
  2423. @@:    SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  2424.     move.l    #@stereo1_ext_17,TIMERD_VECTOR
  2425.     rte
  2426.  
  2427.     STEREO_ENTRY
  2428. @stereo1_play_71:
  2429.     TIMERD_DI
  2430.     VISUAL    1,0
  2431.     stereo_right_play    $7E,a0    ;(CH7C2)TL
  2432.     subq.w    #1,counter
  2433.     bcs    @f
  2434.     move.l    #@stereo1_play_17,TIMERD_VECTOR
  2435.     rte
  2436. @@:    SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  2437.     move.l    #@stereo1_ext_17,TIMERD_VECTOR
  2438.     rte
  2439.  
  2440.     stereo_right_over    a0
  2441.     subq.w    #1,counter
  2442.     bcs    @f
  2443.     move.l    #@stereo1_play_15,TIMERD_VECTOR
  2444.     rte
  2445. @@:    SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  2446.     move.l    #@stereo1_ext_15,TIMERD_VECTOR
  2447.     rte
  2448.  
  2449.     STEREO_ENTRY
  2450. @stereo1_play_53:
  2451.     TIMERD_DI
  2452.     VISUAL    1,0
  2453.     stereo_right_play    $7C,a0    ;(CH5C2)TL
  2454.     subq.w    #1,counter
  2455.     bcs    @f
  2456.     move.l    #@stereo1_play_35,TIMERD_VECTOR
  2457.     rte
  2458. @@:    SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  2459.     move.l    #@stereo1_ext_35,TIMERD_VECTOR
  2460.     rte
  2461.  
  2462.     stereo_right_over    a0
  2463.     subq.w    #1,counter
  2464.     bcs    @f
  2465.     move.l    #@stereo1_play_37,TIMERD_VECTOR
  2466.     rte
  2467. @@:    SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  2468.     move.l    #@stereo1_ext_37,TIMERD_VECTOR
  2469.     rte
  2470.  
  2471.     STEREO_ENTRY
  2472. @stereo1_play_73:
  2473.     TIMERD_DI
  2474.     VISUAL    1,0
  2475.     stereo_right_play    $7E,a0    ;(CH7C2)TL
  2476.     subq.w    #1,counter
  2477.     bcs    @f
  2478.     move.l    #@stereo1_play_37,TIMERD_VECTOR
  2479.     rte
  2480. @@:    SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  2481.     move.l    #@stereo1_ext_37,TIMERD_VECTOR
  2482.     rte
  2483.  
  2484.     stereo_right_over    a0
  2485.     subq.w    #1,counter
  2486.     bcs    @f
  2487.     move.l    #@stereo1_play_35,TIMERD_VECTOR
  2488.     rte
  2489. @@:    SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  2490.     move.l    #@stereo1_ext_35,TIMERD_VECTOR
  2491.     rte
  2492.  
  2493. ;カウンタがオーバーフローしたので,left/rightそれぞれ0が出てくるまで待ち,
  2494. ;0が出てきたら個々に次のchに遷移する
  2495. ;0が出てこなくてもカウンタがオーバーフローしたら強制的に次のchに遷移する
  2496. ;カウントはrightのみで行う
  2497.  
  2498. ;まだleft/right共に0が出てきていない
  2499.     STEREO_ENTRY
  2500. @stereo1_ext_15:
  2501.     TIMERD_DI
  2502.     VISUAL    1,1
  2503.     stereo_left_play    $78,a0    ;(CH1C2)TL
  2504.     move.l    #@stereo1_ext_51,TIMERD_VECTOR
  2505.     rte
  2506.  
  2507.     stereo_left_over    a0
  2508.     move.l    #@stereo1_ext_54,TIMERD_VECTOR
  2509.     rte
  2510.  
  2511.     STEREO_ENTRY
  2512. @stereo1_ext_35:
  2513.     TIMERD_DI
  2514.     VISUAL    1,1
  2515.     stereo_left_play    $7A,a0    ;(CH3C2)TL
  2516.     move.l    #@stereo1_ext_53,TIMERD_VECTOR
  2517.     rte
  2518.  
  2519.     stereo_left_over    a0
  2520.     move.l    #@stereo1_ext_52,TIMERD_VECTOR
  2521.     rte
  2522.  
  2523.     STEREO_ENTRY
  2524. @stereo1_ext_17:
  2525.     TIMERD_DI
  2526.     VISUAL    1,1
  2527.     stereo_left_play    $78,a0    ;(CH1C2)TL
  2528.     move.l    #@stereo1_ext_71,TIMERD_VECTOR
  2529.     rte
  2530.  
  2531.     stereo_left_over    a0
  2532.     move.l    #@stereo1_ext_74,TIMERD_VECTOR
  2533.     rte
  2534.  
  2535.     STEREO_ENTRY
  2536. @stereo1_ext_37:
  2537.     TIMERD_DI
  2538.     VISUAL    1,1
  2539.     stereo_left_play    $7A,a0    ;(CH3C2)TL
  2540.     move.l    #@stereo1_ext_73,TIMERD_VECTOR
  2541.     rte
  2542.  
  2543.     stereo_left_over    a0
  2544.     move.l    #@stereo1_ext_72,TIMERD_VECTOR
  2545.     rte
  2546.  
  2547.     STEREO_ENTRY
  2548. @stereo1_ext_51:
  2549.     TIMERD_DI
  2550.     VISUAL    1,1
  2551.     stereo_right_play    $7C,a0    ;(CH5C2)TL
  2552.     subq.w    #1,counter
  2553.     bcs    @f
  2554.     move.l    #@stereo1_ext_15,TIMERD_VECTOR
  2555.     rte
  2556. @@:    move.l    #@stereo1_mute_15,TIMERD_VECTOR
  2557.     rte
  2558.  
  2559.     stereo_right_over    a0
  2560.     subq.w    #1,counter
  2561.     bcs    @f
  2562.     move.l    #@stereo1_ext_17,TIMERD_VECTOR
  2563.     rte
  2564. @@:    move.l    #@stereo1_mute_18,TIMERD_VECTOR
  2565.     rte
  2566.  
  2567.     STEREO_ENTRY
  2568. @stereo1_ext_71:
  2569.     TIMERD_DI
  2570.     VISUAL    1,1
  2571.     stereo_right_play    $7E,a0    ;(CH7C2)TL
  2572.     subq.w    #1,counter
  2573.     bcs    @f
  2574.     move.l    #@stereo1_ext_17,TIMERD_VECTOR
  2575.     rte
  2576. @@:    move.l    #@stereo1_mute_17,TIMERD_VECTOR
  2577.     rte
  2578.  
  2579.     stereo_right_over    a0
  2580.     subq.w    #1,counter
  2581.     bcs    @f
  2582.     move.l    #@stereo1_ext_15,TIMERD_VECTOR
  2583.     rte
  2584. @@:    move.l    #@stereo1_mute_16,TIMERD_VECTOR
  2585.     rte
  2586.  
  2587.     STEREO_ENTRY
  2588. @stereo1_ext_53:
  2589.     TIMERD_DI
  2590.     VISUAL    1,1
  2591.     stereo_right_play    $7C,a0    ;(CH5C2)TL
  2592.     subq.w    #1,counter
  2593.     bcs    @f
  2594.     move.l    #@stereo1_ext_35,TIMERD_VECTOR
  2595.     rte
  2596. @@:    move.l    #@stereo1_mute_35,TIMERD_VECTOR
  2597.     rte
  2598.  
  2599.     stereo_right_over    a0
  2600.     subq.w    #1,counter
  2601.     bcs    @f
  2602.     move.l    #@stereo1_ext_37,TIMERD_VECTOR
  2603.     rte
  2604. @@:    move.l    #@stereo1_mute_38,TIMERD_VECTOR
  2605.     rte
  2606.  
  2607.     STEREO_ENTRY
  2608. @stereo1_ext_73:
  2609.     TIMERD_DI
  2610.     VISUAL    1,1
  2611.     stereo_right_play    $7E,a0    ;(CH7C2)TL
  2612.     subq.w    #1,counter
  2613.     bcs    @f
  2614.     move.l    #@stereo1_ext_37,TIMERD_VECTOR
  2615.     rte
  2616. @@:    move.l    #@stereo1_mute_37,TIMERD_VECTOR
  2617.     rte
  2618.  
  2619.     stereo_right_over    a0
  2620.     subq.w    #1,counter
  2621.     bcs    @f
  2622.     move.l    #@stereo1_ext_35,TIMERD_VECTOR
  2623.     rte
  2624. @@:    move.l    #@stereo1_mute_36,TIMERD_VECTOR
  2625.     rte
  2626.  
  2627. ;leftだけ0が出てきて次のchに遷移した
  2628. ;rightに0が出てきたら次のchに遷移する
  2629.     STEREO_ENTRY
  2630. @stereo1_ext_25:
  2631.     TIMERD_DI
  2632.     VISUAL    1,1
  2633.     stereo_left_play    $79,a0    ;(CH2C2)TL
  2634.     move.l    #@stereo1_ext_52,TIMERD_VECTOR
  2635.     rte
  2636.  
  2637.     stereo_left_over    a0
  2638.     move.l    #@stereo1_ext_54,TIMERD_VECTOR
  2639.     rte
  2640.  
  2641.     STEREO_ENTRY
  2642. @stereo1_ext_45:
  2643.     TIMERD_DI
  2644.     VISUAL    1,1
  2645.     stereo_left_play    $7B,a0    ;(CH4C2)TL
  2646.     move.l    #@stereo1_ext_54,TIMERD_VECTOR
  2647.     rte
  2648.  
  2649.     stereo_left_over    a0
  2650.     move.l    #@stereo1_ext_52,TIMERD_VECTOR
  2651.     rte
  2652.  
  2653.     STEREO_ENTRY
  2654. @stereo1_ext_27:
  2655.     TIMERD_DI
  2656.     VISUAL    1,1
  2657.     stereo_left_play    $79,a0    ;(CH2C2)TL
  2658.     move.l    #@stereo1_ext_72,TIMERD_VECTOR
  2659.     rte
  2660.  
  2661.     stereo_left_over    a0
  2662.     move.l    #@stereo1_ext_74,TIMERD_VECTOR
  2663.     rte
  2664.  
  2665.     STEREO_ENTRY
  2666. @stereo1_ext_47:
  2667.     TIMERD_DI
  2668.     VISUAL    1,1
  2669.     stereo_left_play    $7B,a0    ;(CH4C2)TL
  2670.     move.l    #@stereo1_ext_74,TIMERD_VECTOR
  2671.     rte
  2672.  
  2673.     stereo_left_over    a0
  2674.     move.l    #@stereo1_ext_72,TIMERD_VECTOR
  2675.     rte
  2676.  
  2677.     STEREO_ENTRY
  2678. @stereo1_ext_52:
  2679.     TIMERD_DI
  2680.     VISUAL    1,1
  2681.     stereo_right_play    $7C,a0    ;(CH5C2)TL
  2682.     subq.w    #1,counter
  2683.     bcs    @f
  2684.     move.l    #@stereo1_ext_25,TIMERD_VECTOR
  2685.     rte
  2686. @@:    move.l    #@stereo1_mute_25,TIMERD_VECTOR
  2687.     rte
  2688.  
  2689.     stereo_right_over    a0
  2690.     SETUP_ADDIW_IMM    INTERVAL_STEREO_2,counter
  2691.     move.l    #@stereo2_play_28,TIMERD_VECTOR
  2692.     rte
  2693.  
  2694.     STEREO_ENTRY
  2695. @stereo1_ext_72:
  2696.     TIMERD_DI
  2697.     VISUAL    1,1
  2698.     stereo_right_play    $7E,a0    ;(CH7C2)TL
  2699.     subq.w    #1,counter
  2700.     bcs    @f
  2701.     move.l    #@stereo1_ext_27,TIMERD_VECTOR
  2702.     rte
  2703. @@:    move.l    #@stereo1_mute_27,TIMERD_VECTOR
  2704.     rte
  2705.  
  2706.     stereo_right_over    a0
  2707.     SETUP_ADDIW_IMM    INTERVAL_STEREO_2,counter
  2708.     move.l    #@stereo2_play_26,TIMERD_VECTOR
  2709.     rte
  2710.  
  2711.     STEREO_ENTRY
  2712. @stereo1_ext_54:
  2713.     TIMERD_DI
  2714.     VISUAL    1,1
  2715.     stereo_right_play    $7C,a0    ;(CH5C2)TL
  2716.     subq.w    #1,counter
  2717.     bcs    @f
  2718.     move.l    #@stereo1_ext_45,TIMERD_VECTOR
  2719.     rte
  2720. @@:    move.l    #@stereo1_mute_45,TIMERD_VECTOR
  2721.     rte
  2722.  
  2723.     stereo_right_over    a0
  2724.     SETUP_ADDIW_IMM    INTERVAL_STEREO_2,counter
  2725.     move.l    #@stereo2_play_48,TIMERD_VECTOR
  2726.     rte
  2727.  
  2728.     STEREO_ENTRY
  2729. @stereo1_ext_74:
  2730.     TIMERD_DI
  2731.     VISUAL    1,1
  2732.     stereo_right_play    $7E,a0    ;(CH7C2)TL
  2733.     subq.w    #1,counter
  2734.     bcs    @f
  2735.     move.l    #@stereo1_ext_47,TIMERD_VECTOR
  2736.     rte
  2737. @@:    move.l    #@stereo1_mute_47,TIMERD_VECTOR
  2738.     rte
  2739.  
  2740.     stereo_right_over    a0
  2741.     SETUP_ADDIW_IMM    INTERVAL_STEREO_2,counter
  2742.     move.l    #@stereo2_play_46,TIMERD_VECTOR
  2743.     rte
  2744.  
  2745. ;rightだけ0が出てきて次のchに遷移した
  2746. ;leftに0が出てきたら次のchに遷移する
  2747.     STEREO_ENTRY
  2748. @stereo1_ext_16:
  2749.     TIMERD_DI
  2750.     VISUAL    1,1
  2751.     stereo_left_play    $78,a0    ;(CH1C2)TL
  2752.     move.l    #@stereo1_ext_61,TIMERD_VECTOR
  2753.     rte
  2754.  
  2755.     stereo_left_over    a0
  2756.     SETUP_ADDIW_IMM    INTERVAL_STEREO_2,counter
  2757.     move.l    #@stereo2_play_64,TIMERD_VECTOR
  2758.     rte
  2759.  
  2760.     STEREO_ENTRY
  2761. @stereo1_ext_36:
  2762.     TIMERD_DI
  2763.     VISUAL    1,1
  2764.     stereo_left_play    $7A,a0    ;(CH3C2)TL
  2765.     move.l    #@stereo1_ext_63,TIMERD_VECTOR
  2766.     rte
  2767.  
  2768.     stereo_left_over    a0
  2769.     SETUP_ADDIW_IMM    INTERVAL_STEREO_2,counter
  2770.     move.l    #@stereo2_play_62,TIMERD_VECTOR
  2771.     rte
  2772.  
  2773.     STEREO_ENTRY
  2774. @stereo1_ext_18:
  2775.     TIMERD_DI
  2776.     VISUAL    1,1
  2777.     stereo_left_play    $78,a0    ;(CH1C2)TL
  2778.     move.l    #@stereo1_ext_81,TIMERD_VECTOR
  2779.     rte
  2780.  
  2781.     stereo_left_over    a0
  2782.     SETUP_ADDIW_IMM    INTERVAL_STEREO_2,counter
  2783.     move.l    #@stereo2_play_84,TIMERD_VECTOR
  2784.     rte
  2785.  
  2786.     STEREO_ENTRY
  2787. @stereo1_ext_38:
  2788.     TIMERD_DI
  2789.     VISUAL    1,1
  2790.     stereo_left_play    $7A,a0    ;(CH3C2)TL
  2791.     move.l    #@stereo1_ext_83,TIMERD_VECTOR
  2792.     rte
  2793.  
  2794.     stereo_left_over    a0
  2795.     SETUP_ADDIW_IMM    INTERVAL_STEREO_2,counter
  2796.     move.l    #@stereo2_play_82,TIMERD_VECTOR
  2797.     rte
  2798.  
  2799.     STEREO_ENTRY
  2800. @stereo1_ext_61:
  2801.     TIMERD_DI
  2802.     VISUAL    1,1
  2803.     stereo_right_play    $7D,a0    ;(CH6C2)TL
  2804.     subq.w    #1,counter
  2805.     bcs    @f
  2806.     move.l    #@stereo1_ext_16,TIMERD_VECTOR
  2807.     rte
  2808. @@:    move.l    #@stereo1_mute_16,TIMERD_VECTOR
  2809.     rte
  2810.  
  2811.     stereo_right_over    a0
  2812.     subq.w    #1,counter
  2813.     bcs    @f
  2814.     move.l    #@stereo1_ext_18,TIMERD_VECTOR
  2815.     rte
  2816. @@:    move.l    #@stereo1_mute_18,TIMERD_VECTOR
  2817.     rte
  2818.  
  2819.     STEREO_ENTRY
  2820. @stereo1_ext_81:
  2821.     TIMERD_DI
  2822.     VISUAL    1,1
  2823.     stereo_right_play    $7F,a0    ;(CH8C2)TL
  2824.     subq.w    #1,counter
  2825.     bcs    @f
  2826.     move.l    #@stereo1_ext_18,TIMERD_VECTOR
  2827.     rte
  2828. @@:    move.l    #@stereo1_mute_18,TIMERD_VECTOR
  2829.     rte
  2830.  
  2831.     stereo_right_over    a0
  2832.     subq.w    #1,counter
  2833.     bcs    @f
  2834.     move.l    #@stereo1_ext_16,TIMERD_VECTOR
  2835.     rte
  2836. @@:    move.l    #@stereo1_mute_16,TIMERD_VECTOR
  2837.     rte
  2838.  
  2839.     STEREO_ENTRY
  2840. @stereo1_ext_63:
  2841.     TIMERD_DI
  2842.     VISUAL    1,1
  2843.     stereo_right_play    $7D,a0    ;(CH6C2)TL
  2844.     subq.w    #1,counter
  2845.     bcs    @f
  2846.     move.l    #@stereo1_ext_36,TIMERD_VECTOR
  2847.     rte
  2848. @@:    move.l    #@stereo1_mute_36,TIMERD_VECTOR
  2849.     rte
  2850.  
  2851.     stereo_right_over    a0
  2852.     subq.w    #1,counter
  2853.     bcs    @f
  2854.     move.l    #@stereo1_ext_38,TIMERD_VECTOR
  2855.     rte
  2856. @@:    move.l    #@stereo1_mute_38,TIMERD_VECTOR
  2857.     rte
  2858.  
  2859.     STEREO_ENTRY
  2860. @stereo1_ext_83:
  2861.     TIMERD_DI
  2862.     VISUAL    1,1
  2863.     stereo_right_play    $7F,a0    ;(CH8C2)TL
  2864.     subq.w    #1,counter
  2865.     bcs    @f
  2866.     move.l    #@stereo1_ext_38,TIMERD_VECTOR
  2867.     rte
  2868. @@:    move.l    #@stereo1_mute_38,TIMERD_VECTOR
  2869.     rte
  2870.  
  2871.     stereo_right_over    a0
  2872.     subq.w    #1,counter
  2873.     bcs    @f
  2874.     move.l    #@stereo1_ext_36,TIMERD_VECTOR
  2875.     rte
  2876. @@:    move.l    #@stereo1_mute_36,TIMERD_VECTOR
  2877.     rte
  2878.  
  2879. ;left/right共に0が出てこないままカウンタがオーバーフローした
  2880. ;left/right共にmuteしてchを遷移する
  2881.     STEREO_ENTRY
  2882. @stereo1_mute_15:
  2883.     TIMERD_DI
  2884.     VISUAL    1,3
  2885.     move.b    #$78,OPMADR        ;(CH1C2)TL
  2886.     OPMADR_WAIT
  2887.     move.b    #ZERO_TL,OPMDAT
  2888.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  2889.     OPMDAT_WAIT
  2890.     stereo_left_play    $79,a0    ;(CH2C2)TL
  2891.     move.l    #@stereo1_mute_52,TIMERD_VECTOR
  2892.     rte
  2893.  
  2894.     stereo_left_over    a0
  2895.     move.l    #@stereo1_mute_54,TIMERD_VECTOR
  2896.     rte
  2897.  
  2898.     STEREO_ENTRY
  2899. @stereo1_mute_35:
  2900.     TIMERD_DI
  2901.     VISUAL    1,3
  2902.     move.b    #$7A,OPMADR        ;(CH3C2)TL
  2903.     OPMADR_WAIT
  2904.     move.b    #ZERO_TL,OPMDAT
  2905.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  2906.     OPMDAT_WAIT
  2907.     stereo_left_play    $7B,a0    ;(CH4C2)TL
  2908.     move.l    #@stereo1_mute_54,TIMERD_VECTOR
  2909.     rte
  2910.  
  2911.     stereo_left_over    a0
  2912.     move.l    #@stereo1_mute_52,TIMERD_VECTOR
  2913.     rte
  2914.  
  2915.     STEREO_ENTRY
  2916. @stereo1_mute_17:
  2917.     TIMERD_DI
  2918.     VISUAL    1,3
  2919.     move.b    #$78,OPMADR        ;(CH1C2)TL
  2920.     OPMADR_WAIT
  2921.     move.b    #ZERO_TL,OPMDAT
  2922.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  2923.     OPMDAT_WAIT
  2924.     stereo_left_play    $79,a0    ;(CH2C2)TL
  2925.     move.l    #@stereo1_mute_72,TIMERD_VECTOR
  2926.     rte
  2927.  
  2928.     stereo_left_over    a0
  2929.     move.l    #@stereo1_mute_74,TIMERD_VECTOR
  2930.     rte
  2931.  
  2932.     STEREO_ENTRY
  2933. @stereo1_mute_37:
  2934.     TIMERD_DI
  2935.     VISUAL    1,3
  2936.     move.b    #$7A,OPMADR        ;(CH3C2)TL
  2937.     OPMADR_WAIT
  2938.     move.b    #ZERO_TL,OPMDAT
  2939.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  2940.     OPMDAT_WAIT
  2941.     stereo_left_play    $7B,a0    ;(CH4C2)TL
  2942.     move.l    #@stereo1_mute_74,TIMERD_VECTOR
  2943.     rte
  2944.  
  2945.     stereo_left_over    a0
  2946.     move.l    #@stereo1_mute_72,TIMERD_VECTOR
  2947.     rte
  2948.  
  2949.     STEREO_ENTRY
  2950. @stereo1_mute_54:
  2951.     TIMERD_DI
  2952.     VISUAL    1,3
  2953.     OPMDAT_WAIT            ;念のため
  2954.     move.b    #$7C,OPMADR        ;(CH5C2)TL
  2955.     OPMADR_WAIT
  2956.     move.b    #ZERO_TL,OPMDAT
  2957.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  2958.     OPMDAT_WAIT
  2959.     stereo_right_play    $7D,a0    ;(CH6C2)TL
  2960.     SETUP_MOVEW_IMM    INTERVAL_STEREO_1,counter
  2961.     move.l    #@stereo2_play_46,TIMERD_VECTOR
  2962.     rte
  2963.  
  2964.     stereo_right_over    a0
  2965.     SETUP_MOVEW_IMM    INTERVAL_STEREO_1,counter
  2966.     move.l    #@stereo2_play_48,TIMERD_VECTOR
  2967.     rte
  2968.  
  2969.     STEREO_ENTRY
  2970. @stereo1_mute_74:
  2971.     TIMERD_DI
  2972.     VISUAL    1,3
  2973.     OPMDAT_WAIT            ;念のため
  2974.     move.b    #$7E,OPMADR        ;(CH7C2)TL
  2975.     OPMADR_WAIT
  2976.     move.b    #ZERO_TL,OPMDAT
  2977.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  2978.     OPMDAT_WAIT
  2979.     stereo_right_play    $7F,a0    ;(CH8C2)TL
  2980.     SETUP_MOVEW_IMM    INTERVAL_STEREO_1,counter
  2981.     move.l    #@stereo2_play_48,TIMERD_VECTOR
  2982.     rte
  2983.  
  2984.     stereo_right_over    a0
  2985.     SETUP_MOVEW_IMM    INTERVAL_STEREO_1,counter
  2986.     move.l    #@stereo2_play_46,TIMERD_VECTOR
  2987.     rte
  2988.  
  2989.     STEREO_ENTRY
  2990. @stereo1_mute_52:
  2991.     TIMERD_DI
  2992.     VISUAL    1,3
  2993.     OPMDAT_WAIT            ;念のため
  2994.     move.b    #$7C,OPMADR        ;(CH5C2)TL
  2995.     OPMADR_WAIT
  2996.     move.b    #ZERO_TL,OPMDAT
  2997.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  2998.     OPMDAT_WAIT
  2999.     stereo_right_play    $7D,a0    ;(CH6C2)TL
  3000.     SETUP_MOVEW_IMM    INTERVAL_STEREO_1,counter
  3001.     move.l    #@stereo2_play_26,TIMERD_VECTOR
  3002.     rte
  3003.  
  3004.     stereo_right_over    a0
  3005.     SETUP_MOVEW_IMM    INTERVAL_STEREO_1,counter
  3006.     move.l    #@stereo2_play_28,TIMERD_VECTOR
  3007.     rte
  3008.  
  3009.     STEREO_ENTRY
  3010. @stereo1_mute_72:
  3011.     TIMERD_DI
  3012.     VISUAL    1,3
  3013.     OPMDAT_WAIT            ;念のため
  3014.     move.b    #$7E,OPMADR        ;(CH7C2)TL
  3015.     OPMADR_WAIT
  3016.     move.b    #ZERO_TL,OPMDAT
  3017.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  3018.     OPMDAT_WAIT
  3019.     stereo_right_play    $7F,a0    ;(CH8C2)TL
  3020.     SETUP_MOVEW_IMM    INTERVAL_STEREO_1,counter
  3021.     move.l    #@stereo2_play_28,TIMERD_VECTOR
  3022.     rte
  3023.  
  3024.     stereo_right_over    a0
  3025.     SETUP_MOVEW_IMM    INTERVAL_STEREO_1,counter
  3026.     move.l    #@stereo2_play_26,TIMERD_VECTOR
  3027.     rte
  3028.  
  3029. ;leftだけ0が出てこないままカウンタがオーバーフローした
  3030. ;leftだけmuteしてchを遷移する
  3031.     STEREO_ENTRY
  3032. @stereo1_mute_16:
  3033.     TIMERD_DI
  3034.     VISUAL    1,2
  3035.     move.b    #$78,OPMADR        ;(CH1C2)TL
  3036.     OPMADR_WAIT
  3037.     move.b    #ZERO_TL,OPMDAT
  3038.     SETUP_MOVEW_IMM    INTERVAL_STEREO_2,counter
  3039.     move.l    #@stereo2_start_26,TIMERD_VECTOR
  3040.     rte
  3041.  
  3042.     STEREO_ENTRY
  3043. @stereo1_mute_36:
  3044.     TIMERD_DI
  3045.     VISUAL    1,2
  3046.     move.b    #$7A,OPMADR        ;(CH3C2)TL
  3047.     OPMADR_WAIT
  3048.     move.b    #ZERO_TL,OPMDAT
  3049.     SETUP_MOVEW_IMM    INTERVAL_STEREO_2,counter
  3050.     move.l    #@stereo2_start_46,TIMERD_VECTOR
  3051.     rte
  3052.  
  3053.     STEREO_ENTRY
  3054. @stereo1_mute_18:
  3055.     TIMERD_DI
  3056.     VISUAL    1,2
  3057.     move.b    #$78,OPMADR        ;(CH1C2)TL
  3058.     OPMADR_WAIT
  3059.     move.b    #ZERO_TL,OPMDAT
  3060.     SETUP_MOVEW_IMM    INTERVAL_STEREO_2,counter
  3061.     move.l    #@stereo2_start_28,TIMERD_VECTOR
  3062.     rte
  3063.  
  3064.     STEREO_ENTRY
  3065. @stereo1_mute_38:
  3066.     TIMERD_DI
  3067.     VISUAL    1,2
  3068.     move.b    #$7A,OPMADR        ;(CH3C2)TL
  3069.     OPMADR_WAIT
  3070.     move.b    #ZERO_TL,OPMDAT
  3071.     SETUP_MOVEW_IMM    INTERVAL_STEREO_2,counter
  3072.     move.l    #@stereo2_start_48,TIMERD_VECTOR
  3073.     rte
  3074.  
  3075. ;rightだけ0が出てこないままカウンタがオーバーフローした
  3076. ;rightだけmuteしてchを遷移する
  3077.     STEREO_ENTRY
  3078. @stereo1_mute_25:
  3079.     TIMERD_DI
  3080.     VISUAL    1,4
  3081.     stereo_left_play    $79,a0    ;(CH2C2)TL
  3082.     move.l    #@stereo1_mute_62,TIMERD_VECTOR
  3083.     rte
  3084.  
  3085.     stereo_left_over    a0
  3086.     move.l    #@stereo1_mute_64,TIMERD_VECTOR
  3087.     rte
  3088.  
  3089.     STEREO_ENTRY
  3090. @stereo1_mute_45:
  3091.     TIMERD_DI
  3092.     VISUAL    1,4
  3093.     stereo_left_play    $7B,a0    ;(CH4C2)TL
  3094.     move.l    #@stereo1_mute_64,TIMERD_VECTOR
  3095.     rte
  3096.  
  3097.     stereo_left_over    a0
  3098.     move.l    #@stereo1_mute_62,TIMERD_VECTOR
  3099.     rte
  3100.  
  3101.     STEREO_ENTRY
  3102. @stereo1_mute_27:
  3103.     TIMERD_DI
  3104.     VISUAL    1,4
  3105.     stereo_left_play    $79,a0    ;(CH2C2)TL
  3106.     move.l    #@stereo1_mute_82,TIMERD_VECTOR
  3107.     rte
  3108.  
  3109.     stereo_left_over    a0
  3110.     move.l    #@stereo1_mute_84,TIMERD_VECTOR
  3111.     rte
  3112.  
  3113.     STEREO_ENTRY
  3114. @stereo1_mute_47:
  3115.     TIMERD_DI
  3116.     VISUAL    1,4
  3117.     stereo_left_play    $7B,a0    ;(CH4C2)TL
  3118.     move.l    #@stereo1_mute_84,TIMERD_VECTOR
  3119.     rte
  3120.  
  3121.     stereo_left_over    a0
  3122.     move.l    #@stereo1_mute_82,TIMERD_VECTOR
  3123.     rte
  3124.  
  3125.     STEREO_ENTRY
  3126. @stereo1_mute_62:
  3127.     TIMERD_DI
  3128.     VISUAL    1,4
  3129.     move.b    #$7C,OPMADR        ;(CH5C2)TL
  3130.     OPMADR_WAIT
  3131.     move.b    #ZERO_TL,OPMDAT
  3132.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  3133.     OPMDAT_WAIT
  3134.     stereo_right_play    $7D,a0    ;(CH6C2)TL
  3135.     SETUP_ADDIW_IMM    INTERVAL_STEREO_1,counter
  3136.     move.l    #@stereo2_play_26,TIMERD_VECTOR
  3137.     rte
  3138.  
  3139.     stereo_right_over    a0
  3140.     SETUP_ADDIW_IMM    INTERVAL_STEREO_1,counter
  3141.     move.l    #@stereo2_play_28,TIMERD_VECTOR
  3142.     rte
  3143.  
  3144.     STEREO_ENTRY
  3145. @stereo1_mute_82:
  3146.     TIMERD_DI
  3147.     VISUAL    1,4
  3148.     move.b    #$7E,OPMADR        ;(CH7C2)TL
  3149.     OPMADR_WAIT
  3150.     move.b    #ZERO_TL,OPMDAT
  3151.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  3152.     OPMDAT_WAIT
  3153.     stereo_right_play    $7F,a0    ;(CH8C2)TL
  3154.     SETUP_ADDIW_IMM    INTERVAL_STEREO_1,counter
  3155.     move.l    #@stereo2_play_28,TIMERD_VECTOR
  3156.     rte
  3157.  
  3158.     stereo_right_over    a0
  3159.     SETUP_ADDIW_IMM    INTERVAL_STEREO_1,counter
  3160.     move.l    #@stereo2_play_26,TIMERD_VECTOR
  3161.     rte
  3162.  
  3163.     STEREO_ENTRY
  3164. @stereo1_mute_64:
  3165.     TIMERD_DI
  3166.     VISUAL    1,4
  3167.     move.b    #$7C,OPMADR        ;(CH5C2)TL
  3168.     OPMADR_WAIT
  3169.     move.b    #ZERO_TL,OPMDAT
  3170.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  3171.     OPMDAT_WAIT
  3172.     stereo_right_play    $7D,a0    ;(CH6C2)TL
  3173.     SETUP_ADDIW_IMM    INTERVAL_STEREO_1,counter
  3174.     move.l    #@stereo2_play_46,TIMERD_VECTOR
  3175.     rte
  3176.  
  3177.     stereo_right_over    a0
  3178.     SETUP_ADDIW_IMM    INTERVAL_STEREO_1,counter
  3179.     move.l    #@stereo2_play_48,TIMERD_VECTOR
  3180.     rte
  3181.  
  3182.     STEREO_ENTRY
  3183. @stereo1_mute_84:
  3184.     TIMERD_DI
  3185.     VISUAL    1,4
  3186.     move.b    #$7E,OPMADR        ;(CH7C2)TL
  3187.     OPMADR_WAIT
  3188.     move.b    #ZERO_TL,OPMDAT
  3189.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  3190.     OPMDAT_WAIT
  3191.     stereo_right_play    $7F,a0    ;(CH8C2)TL
  3192.     SETUP_ADDIW_IMM    INTERVAL_STEREO_1,counter
  3193.     move.l    #@stereo2_play_48,TIMERD_VECTOR
  3194.     rte
  3195.  
  3196.     stereo_right_over    a0
  3197.     SETUP_ADDIW_IMM    INTERVAL_STEREO_1,counter
  3198.     move.l    #@stereo2_play_46,TIMERD_VECTOR
  3199.     rte
  3200.  
  3201. ;----------------------------------------------------------------
  3202. ;カウンタがオーバーフローするまでleft,rightの順に交互に出力する
  3203. ;スピードレートの調整はleftのみで行う
  3204. ;スピードレートの調整に伴うデータの採取の延期はleft/right共に1データ分
  3205. ;カウントはrightのみで行う
  3206.  
  3207. ;データにない0を挟んだ直後は必ず発音する
  3208.     STEREO_ENTRY
  3209. @stereo2_start_26:
  3210.     TIMERD_DI
  3211.     VISUAL    2,0
  3212.     stereo_left_play    $79,a0    ;(CH2C2)TL
  3213.     move.l    #@stereo2_play_62,TIMERD_VECTOR
  3214.     rte
  3215.  
  3216.     stereo_left_over    a0
  3217.     move.l    #@stereo2_play_64,TIMERD_VECTOR
  3218.     rte
  3219.  
  3220.     STEREO_ENTRY
  3221. @stereo2_start_46:
  3222.     TIMERD_DI
  3223.     VISUAL    2,0
  3224.     stereo_left_play    $7B,a0    ;(CH4C2)TL
  3225.     move.l    #@stereo2_play_64,TIMERD_VECTOR
  3226.     rte
  3227.  
  3228.     stereo_left_over    a0
  3229.     move.l    #@stereo2_play_62,TIMERD_VECTOR
  3230.     rte
  3231.  
  3232.     STEREO_ENTRY
  3233. @stereo2_start_28:
  3234.     TIMERD_DI
  3235.     VISUAL    2,0
  3236.     stereo_left_play    $79,a0    ;(CH2C2)TL
  3237.     move.l    #@stereo2_play_82,TIMERD_VECTOR
  3238.     rte
  3239.  
  3240.     stereo_left_over    a0
  3241.     move.l    #@stereo2_play_84,TIMERD_VECTOR
  3242.     rte
  3243.  
  3244.     STEREO_ENTRY
  3245. @stereo2_start_48:
  3246.     TIMERD_DI
  3247.     VISUAL    2,0
  3248.     stereo_left_play    $7B,a0    ;(CH4C2)TL
  3249.     move.l    #@stereo2_play_84,TIMERD_VECTOR
  3250.     rte
  3251.  
  3252.     stereo_left_over    a0
  3253.     move.l    #@stereo2_play_82,TIMERD_VECTOR
  3254.     rte
  3255.  
  3256.     STEREO_ENTRY
  3257. @stereo2_play_26:
  3258.     TIMERD_DI
  3259.     VISUAL    2,0
  3260.     stereo_left_play    $79,a0    ;(CH2C2)TL
  3261.     move.l    #@stereo2_play_62,TIMERD_VECTOR
  3262.     rte
  3263.  
  3264.     stereo_left_over    a0
  3265.     move.l    #@stereo2_play_64,TIMERD_VECTOR
  3266.     rte
  3267.  
  3268.     STEREO_ENTRY
  3269. @stereo2_play_46:
  3270.     TIMERD_DI
  3271.     VISUAL    2,0
  3272.     stereo_left_play    $7B,a0    ;(CH4C2)TL
  3273.     move.l    #@stereo2_play_64,TIMERD_VECTOR
  3274.     rte
  3275.  
  3276.     stereo_left_over    a0
  3277.     move.l    #@stereo2_play_62,TIMERD_VECTOR
  3278.     rte
  3279.  
  3280.     STEREO_ENTRY
  3281. @stereo2_play_28:
  3282.     TIMERD_DI
  3283.     VISUAL    2,0
  3284.     stereo_left_play    $79,a0    ;(CH2C2)TL
  3285.     move.l    #@stereo2_play_82,TIMERD_VECTOR
  3286.     rte
  3287.  
  3288.     stereo_left_over    a0
  3289.     move.l    #@stereo2_play_84,TIMERD_VECTOR
  3290.     rte
  3291.  
  3292.     STEREO_ENTRY
  3293. @stereo2_play_48:
  3294.     TIMERD_DI
  3295.     VISUAL    2,0
  3296.     stereo_left_play    $7B,a0    ;(CH4C2)TL
  3297.     move.l    #@stereo2_play_84,TIMERD_VECTOR
  3298.     rte
  3299.  
  3300.     stereo_left_over    a0
  3301.     move.l    #@stereo2_play_82,TIMERD_VECTOR
  3302.     rte
  3303.  
  3304.     STEREO_ENTRY
  3305. @stereo2_play_62:
  3306.     TIMERD_DI
  3307.     VISUAL    2,0
  3308.     stereo_right_play    $7D,a0    ;(CH6C2)TL
  3309.     subq.w    #1,counter
  3310.     bcs    @f
  3311.     move.l    #@stereo2_play_26,TIMERD_VECTOR
  3312.     rte
  3313. @@:    SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  3314.     move.l    #@stereo2_ext_26,TIMERD_VECTOR
  3315.     rte
  3316.  
  3317.     stereo_right_over    a0
  3318.     subq.w    #1,counter
  3319.     bcs    @f
  3320.     move.l    #@stereo2_play_28,TIMERD_VECTOR
  3321.     rte
  3322. @@:    SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  3323.     move.l    #@stereo2_ext_28,TIMERD_VECTOR
  3324.     rte
  3325.  
  3326.     STEREO_ENTRY
  3327. @stereo2_play_82:
  3328.     TIMERD_DI
  3329.     VISUAL    2,0
  3330.     stereo_right_play    $7F,a0    ;(CH8C2)TL
  3331.     subq.w    #1,counter
  3332.     bcs    @f
  3333.     move.l    #@stereo2_play_28,TIMERD_VECTOR
  3334.     rte
  3335. @@:    SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  3336.     move.l    #@stereo2_ext_28,TIMERD_VECTOR
  3337.     rte
  3338.  
  3339.     stereo_right_over    a0
  3340.     subq.w    #1,counter
  3341.     bcs    @f
  3342.     move.l    #@stereo2_play_26,TIMERD_VECTOR
  3343.     rte
  3344. @@:    SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  3345.     move.l    #@stereo2_ext_26,TIMERD_VECTOR
  3346.     rte
  3347.  
  3348.     STEREO_ENTRY
  3349. @stereo2_play_64:
  3350.     TIMERD_DI
  3351.     VISUAL    2,0
  3352.     stereo_right_play    $7D,a0    ;(CH6C2)TL
  3353.     subq.w    #1,counter
  3354.     bcs    @f
  3355.     move.l    #@stereo2_play_46,TIMERD_VECTOR
  3356.     rte
  3357. @@:    SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  3358.     move.l    #@stereo2_ext_46,TIMERD_VECTOR
  3359.     rte
  3360.  
  3361.     stereo_right_over    a0
  3362.     subq.w    #1,counter
  3363.     bcs    @f
  3364.     move.l    #@stereo2_play_48,TIMERD_VECTOR
  3365.     rte
  3366. @@:    SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  3367.     move.l    #@stereo2_ext_48,TIMERD_VECTOR
  3368.     rte
  3369.  
  3370.     STEREO_ENTRY
  3371. @stereo2_play_84:
  3372.     TIMERD_DI
  3373.     VISUAL    2,0
  3374.     stereo_right_play    $7F,a0    ;(CH8C2)TL
  3375.     subq.w    #1,counter
  3376.     bcs    @f
  3377.     move.l    #@stereo2_play_48,TIMERD_VECTOR
  3378.     rte
  3379. @@:    SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  3380.     move.l    #@stereo2_ext_48,TIMERD_VECTOR
  3381.     rte
  3382.  
  3383.     stereo_right_over    a0
  3384.     subq.w    #1,counter
  3385.     bcs    @f
  3386.     move.l    #@stereo2_play_46,TIMERD_VECTOR
  3387.     rte
  3388. @@:    SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  3389.     move.l    #@stereo2_ext_46,TIMERD_VECTOR
  3390.     rte
  3391.  
  3392. ;カウンタがオーバーフローしたので,left/rightそれぞれ0が出てくるまで待ち,
  3393. ;0が出てきたら個々に次のchに遷移する
  3394. ;0が出てこなくてもカウンタがオーバーフローしたら強制的に次のchに遷移する
  3395. ;カウントはrightのみで行う
  3396.  
  3397. ;まだleft/right共に0が出てきていない
  3398.     STEREO_ENTRY
  3399. @stereo2_ext_26:
  3400.     TIMERD_DI
  3401.     VISUAL    2,1
  3402.     stereo_left_play    $79,a0    ;(CH2C2)TL
  3403.     move.l    #@stereo2_ext_62,TIMERD_VECTOR
  3404.     rte
  3405.  
  3406.     stereo_left_over    a0
  3407.     move.l    #@stereo2_ext_61,TIMERD_VECTOR
  3408.     rte
  3409.  
  3410.     STEREO_ENTRY
  3411. @stereo2_ext_46:
  3412.     TIMERD_DI
  3413.     VISUAL    2,1
  3414.     stereo_left_play    $7B,a0    ;(CH4C2)TL
  3415.     move.l    #@stereo2_ext_64,TIMERD_VECTOR
  3416.     rte
  3417.  
  3418.     stereo_left_over    a0
  3419.     move.l    #@stereo2_ext_63,TIMERD_VECTOR
  3420.     rte
  3421.  
  3422.     STEREO_ENTRY
  3423. @stereo2_ext_28:
  3424.     TIMERD_DI
  3425.     VISUAL    2,1
  3426.     stereo_left_play    $79,a0    ;(CH2C2)TL
  3427.     move.l    #@stereo2_ext_82,TIMERD_VECTOR
  3428.     rte
  3429.  
  3430.     stereo_left_over    a0
  3431.     move.l    #@stereo2_ext_81,TIMERD_VECTOR
  3432.     rte
  3433.  
  3434.     STEREO_ENTRY
  3435. @stereo2_ext_48:
  3436.     TIMERD_DI
  3437.     VISUAL    2,1
  3438.     stereo_left_play    $7B,a0    ;(CH4C2)TL
  3439.     move.l    #@stereo2_ext_84,TIMERD_VECTOR
  3440.     rte
  3441.  
  3442.     stereo_left_over    a0
  3443.     move.l    #@stereo2_ext_83,TIMERD_VECTOR
  3444.     rte
  3445.  
  3446.     STEREO_ENTRY
  3447. @stereo2_ext_62:
  3448.     TIMERD_DI
  3449.     VISUAL    2,1
  3450.     stereo_right_play    $7D,a0    ;(CH6C2)TL
  3451.     subq.w    #1,counter
  3452.     bcs    @f
  3453.     move.l    #@stereo2_ext_26,TIMERD_VECTOR
  3454.     rte
  3455. @@:    move.l    #@stereo2_mute_26,TIMERD_VECTOR
  3456.     rte
  3457.  
  3458.     stereo_right_over    a0
  3459.     subq.w    #1,counter
  3460.     bcs    @f
  3461.     move.l    #@stereo2_ext_28,TIMERD_VECTOR
  3462.     rte
  3463. @@:    move.l    #@stereo2_mute_25,TIMERD_VECTOR
  3464.     rte
  3465.  
  3466.     STEREO_ENTRY
  3467. @stereo2_ext_82:
  3468.     TIMERD_DI
  3469.     VISUAL    2,1
  3470.     stereo_right_play    $7F,a0    ;(CH8C2)TL
  3471.     subq.w    #1,counter
  3472.     bcs    @f
  3473.     move.l    #@stereo2_ext_28,TIMERD_VECTOR
  3474.     rte
  3475. @@:    move.l    #@stereo2_mute_28,TIMERD_VECTOR
  3476.     rte
  3477.  
  3478.     stereo_right_over    a0
  3479.     subq.w    #1,counter
  3480.     bcs    @f
  3481.     move.l    #@stereo2_ext_26,TIMERD_VECTOR
  3482.     rte
  3483. @@:    move.l    #@stereo2_mute_27,TIMERD_VECTOR
  3484.     rte
  3485.  
  3486.     STEREO_ENTRY
  3487. @stereo2_ext_64:
  3488.     TIMERD_DI
  3489.     VISUAL    2,1
  3490.     stereo_right_play    $7D,a0    ;(CH6C2)TL
  3491.     subq.w    #1,counter
  3492.     bcs    @f
  3493.     move.l    #@stereo2_ext_46,TIMERD_VECTOR
  3494.     rte
  3495. @@:    move.l    #@stereo2_mute_46,TIMERD_VECTOR
  3496.     rte
  3497.  
  3498.     stereo_right_over    a0
  3499.     subq.w    #1,counter
  3500.     bcs    @f
  3501.     move.l    #@stereo2_ext_48,TIMERD_VECTOR
  3502.     rte
  3503. @@:    move.l    #@stereo2_mute_45,TIMERD_VECTOR
  3504.     rte
  3505.  
  3506.     STEREO_ENTRY
  3507. @stereo2_ext_84:
  3508.     TIMERD_DI
  3509.     VISUAL    2,1
  3510.     stereo_right_play    $7F,a0    ;(CH8C2)TL
  3511.     subq.w    #1,counter
  3512.     bcs    @f
  3513.     move.l    #@stereo2_ext_48,TIMERD_VECTOR
  3514.     rte
  3515. @@:    move.l    #@stereo2_mute_48,TIMERD_VECTOR
  3516.     rte
  3517.  
  3518.     stereo_right_over    a0
  3519.     subq.w    #1,counter
  3520.     bcs    @f
  3521.     move.l    #@stereo2_ext_46,TIMERD_VECTOR
  3522.     rte
  3523. @@:    move.l    #@stereo2_mute_47,TIMERD_VECTOR
  3524.     rte
  3525.  
  3526. ;leftだけ0が出てきて次のchに遷移した
  3527. ;rightに0が出てきたら次のchに遷移する
  3528.     STEREO_ENTRY
  3529. @stereo2_ext_36:
  3530.     TIMERD_DI
  3531.     VISUAL    2,1
  3532.     stereo_left_play    $7A,a0    ;(CH3C2)TL
  3533.     move.l    #@stereo2_ext_63,TIMERD_VECTOR
  3534.     rte
  3535.  
  3536.     stereo_left_over    a0
  3537.     move.l    #@stereo2_ext_61,TIMERD_VECTOR
  3538.     rte
  3539.  
  3540.     STEREO_ENTRY
  3541. @stereo2_ext_16:
  3542.     TIMERD_DI
  3543.     VISUAL    2,1
  3544.     stereo_left_play    $78,a0    ;(CH1C2)TL
  3545.     move.l    #@stereo2_ext_61,TIMERD_VECTOR
  3546.     rte
  3547.  
  3548.     stereo_left_over    a0
  3549.     move.l    #@stereo2_ext_63,TIMERD_VECTOR
  3550.     rte
  3551.  
  3552.     STEREO_ENTRY
  3553. @stereo2_ext_38:
  3554.     TIMERD_DI
  3555.     VISUAL    2,1
  3556.     stereo_left_play    $7A,a0    ;(CH3C2)TL
  3557.     move.l    #@stereo2_ext_83,TIMERD_VECTOR
  3558.     rte
  3559.  
  3560.     stereo_left_over    a0
  3561.     move.l    #@stereo2_ext_81,TIMERD_VECTOR
  3562.     rte
  3563.  
  3564.     STEREO_ENTRY
  3565. @stereo2_ext_18:
  3566.     TIMERD_DI
  3567.     VISUAL    2,1
  3568.     stereo_left_play    $78,a0    ;(CH1C2)TL
  3569.     move.l    #@stereo2_ext_81,TIMERD_VECTOR
  3570.     rte
  3571.  
  3572.     stereo_left_over    a0
  3573.     move.l    #@stereo2_ext_83,TIMERD_VECTOR
  3574.     rte
  3575.  
  3576.     STEREO_ENTRY
  3577. @stereo2_ext_63:
  3578.     TIMERD_DI
  3579.     VISUAL    2,1
  3580.     stereo_right_play    $7D,a0    ;(CH6C2)TL
  3581.     subq.w    #1,counter
  3582.     bcs    @f
  3583.     move.l    #@stereo2_ext_36,TIMERD_VECTOR
  3584.     rte
  3585. @@:    move.l    #@stereo2_mute_36,TIMERD_VECTOR
  3586.     rte
  3587.  
  3588.     stereo_right_over    a0
  3589.     SETUP_ADDIW_IMM    INTERVAL_STEREO_2,counter
  3590.     move.l    #@stereo3_play_35,TIMERD_VECTOR
  3591.     rte
  3592.  
  3593.     STEREO_ENTRY
  3594. @stereo2_ext_83:
  3595.     TIMERD_DI
  3596.     VISUAL    2,1
  3597.     stereo_right_play    $7F,a0    ;(CH8C2)TL
  3598.     subq.w    #1,counter
  3599.     bcs    @f
  3600.     move.l    #@stereo2_ext_38,TIMERD_VECTOR
  3601.     rte
  3602. @@:    move.l    #@stereo2_mute_38,TIMERD_VECTOR
  3603.     rte
  3604.  
  3605.     stereo_right_over    a0
  3606.     SETUP_ADDIW_IMM    INTERVAL_STEREO_2,counter
  3607.     move.l    #@stereo3_play_37,TIMERD_VECTOR
  3608.     rte
  3609.  
  3610.     STEREO_ENTRY
  3611. @stereo2_ext_61:
  3612.     TIMERD_DI
  3613.     VISUAL    2,1
  3614.     stereo_right_play    $7D,a0    ;(CH6C2)TL
  3615.     subq.w    #1,counter
  3616.     bcs    @f
  3617.     move.l    #@stereo2_ext_16,TIMERD_VECTOR
  3618.     rte
  3619. @@:    move.l    #@stereo2_mute_16,TIMERD_VECTOR
  3620.     rte
  3621.  
  3622.     stereo_right_over    a0
  3623.     SETUP_ADDIW_IMM    INTERVAL_STEREO_2,counter
  3624.     move.l    #@stereo3_play_15,TIMERD_VECTOR
  3625.     rte
  3626.  
  3627.     STEREO_ENTRY
  3628. @stereo2_ext_81:
  3629.     TIMERD_DI
  3630.     VISUAL    2,1
  3631.     stereo_right_play    $7F,a0    ;(CH8C2)TL
  3632.     subq.w    #1,counter
  3633.     bcs    @f
  3634.     move.l    #@stereo2_ext_18,TIMERD_VECTOR
  3635.     rte
  3636. @@:    move.l    #@stereo2_mute_18,TIMERD_VECTOR
  3637.     rte
  3638.  
  3639.     stereo_right_over    a0
  3640.     SETUP_ADDIW_IMM    INTERVAL_STEREO_2,counter
  3641.     move.l    #@stereo3_play_17,TIMERD_VECTOR
  3642.     rte
  3643.  
  3644. ;rightだけ0が出てきて次のchに遷移した
  3645. ;leftに0が出てきたら次のchに遷移する
  3646.     STEREO_ENTRY
  3647. @stereo2_ext_27:
  3648.     TIMERD_DI
  3649.     VISUAL    2,1
  3650.     stereo_left_play    $79,a0    ;(CH2C2)TL
  3651.     move.l    #@stereo2_ext_72,TIMERD_VECTOR
  3652.     rte
  3653.  
  3654.     stereo_left_over    a0
  3655.     SETUP_ADDIW_IMM    INTERVAL_STEREO_2,counter
  3656.     move.l    #@stereo3_play_71,TIMERD_VECTOR
  3657.     rte
  3658.  
  3659.     STEREO_ENTRY
  3660. @stereo2_ext_47:
  3661.     TIMERD_DI
  3662.     VISUAL    2,1
  3663.     stereo_left_play    $7B,a0    ;(CH4C2)TL
  3664.     move.l    #@stereo2_ext_74,TIMERD_VECTOR
  3665.     rte
  3666.  
  3667.     stereo_left_over    a0
  3668.     SETUP_ADDIW_IMM    INTERVAL_STEREO_2,counter
  3669.     move.l    #@stereo3_play_73,TIMERD_VECTOR
  3670.     rte
  3671.  
  3672.     STEREO_ENTRY
  3673. @stereo2_ext_25:
  3674.     TIMERD_DI
  3675.     VISUAL    2,1
  3676.     stereo_left_play    $79,a0    ;(CH2C2)TL
  3677.     move.l    #@stereo2_ext_52,TIMERD_VECTOR
  3678.     rte
  3679.  
  3680.     stereo_left_over    a0
  3681.     SETUP_ADDIW_IMM    INTERVAL_STEREO_2,counter
  3682.     move.l    #@stereo3_play_51,TIMERD_VECTOR
  3683.     rte
  3684.  
  3685.     STEREO_ENTRY
  3686. @stereo2_ext_45:
  3687.     TIMERD_DI
  3688.     VISUAL    2,1
  3689.     stereo_left_play    $7B,a0    ;(CH4C2)TL
  3690.     move.l    #@stereo2_ext_54,TIMERD_VECTOR
  3691.     rte
  3692.  
  3693.     stereo_left_over    a0
  3694.     SETUP_ADDIW_IMM    INTERVAL_STEREO_2,counter
  3695.     move.l    #@stereo3_play_53,TIMERD_VECTOR
  3696.     rte
  3697.  
  3698.     STEREO_ENTRY
  3699. @stereo2_ext_72:
  3700.     TIMERD_DI
  3701.     VISUAL    2,1
  3702.     stereo_right_play    $7E,a0    ;(CH7C2)TL
  3703.     subq.w    #1,counter
  3704.     bcs    @f
  3705.     move.l    #@stereo2_ext_27,TIMERD_VECTOR
  3706.     rte
  3707. @@:    move.l    #@stereo2_mute_27,TIMERD_VECTOR
  3708.     rte
  3709.  
  3710.     stereo_right_over    a0
  3711.     subq.w    #1,counter
  3712.     bcs    @f
  3713.     move.l    #@stereo2_ext_25,TIMERD_VECTOR
  3714.     rte
  3715. @@:    move.l    #@stereo2_mute_25,TIMERD_VECTOR
  3716.     rte
  3717.  
  3718.     STEREO_ENTRY
  3719. @stereo2_ext_52:
  3720.     TIMERD_DI
  3721.     VISUAL    2,1
  3722.     stereo_right_play    $7C,a0    ;(CH5C2)TL
  3723.     subq.w    #1,counter
  3724.     bcs    @f
  3725.     move.l    #@stereo2_ext_25,TIMERD_VECTOR
  3726.     rte
  3727. @@:    move.l    #@stereo2_mute_25,TIMERD_VECTOR
  3728.     rte
  3729.  
  3730.     stereo_right_over    a0
  3731.     subq.w    #1,counter
  3732.     bcs    @f
  3733.     move.l    #@stereo2_ext_27,TIMERD_VECTOR
  3734.     rte
  3735. @@:    move.l    #@stereo2_mute_27,TIMERD_VECTOR
  3736.     rte
  3737.  
  3738.     STEREO_ENTRY
  3739. @stereo2_ext_74:
  3740.     TIMERD_DI
  3741.     VISUAL    2,1
  3742.     stereo_right_play    $7E,a0    ;(CH7C2)TL
  3743.     subq.w    #1,counter
  3744.     bcs    @f
  3745.     move.l    #@stereo2_ext_47,TIMERD_VECTOR
  3746.     rte
  3747. @@:    move.l    #@stereo2_mute_47,TIMERD_VECTOR
  3748.     rte
  3749.  
  3750.     stereo_right_over    a0
  3751.     subq.w    #1,counter
  3752.     bcs    @f
  3753.     move.l    #@stereo2_ext_45,TIMERD_VECTOR
  3754.     rte
  3755. @@:    move.l    #@stereo2_mute_45,TIMERD_VECTOR
  3756.     rte
  3757.  
  3758.     STEREO_ENTRY
  3759. @stereo2_ext_54:
  3760.     TIMERD_DI
  3761.     VISUAL    2,1
  3762.     stereo_right_play    $7C,a0    ;(CH5C2)TL
  3763.     subq.w    #1,counter
  3764.     bcs    @f
  3765.     move.l    #@stereo2_ext_45,TIMERD_VECTOR
  3766.     rte
  3767. @@:    move.l    #@stereo2_mute_45,TIMERD_VECTOR
  3768.     rte
  3769.  
  3770.     stereo_right_over    a0
  3771.     subq.w    #1,counter
  3772.     bcs    @f
  3773.     move.l    #@stereo2_ext_47,TIMERD_VECTOR
  3774.     rte
  3775. @@:    move.l    #@stereo2_mute_47,TIMERD_VECTOR
  3776.     rte
  3777.  
  3778. ;left/right共に0が出てこないままカウンタがオーバーフローした
  3779. ;left/right共にmuteしてchを遷移する
  3780.     STEREO_ENTRY
  3781. @stereo2_mute_26:
  3782.     TIMERD_DI
  3783.     VISUAL    2,3
  3784.     move.b    #$79,OPMADR        ;(CH2C2)TL
  3785.     OPMADR_WAIT
  3786.     move.b    #ZERO_TL,OPMDAT
  3787.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  3788.     OPMDAT_WAIT
  3789.     stereo_left_play    $7A,a0    ;(CH3C2)TL
  3790.     move.l    #@stereo2_mute_63,TIMERD_VECTOR
  3791.     rte
  3792.  
  3793.     stereo_left_over    a0
  3794.     move.l    #@stereo2_mute_61,TIMERD_VECTOR
  3795.     rte
  3796.  
  3797.     STEREO_ENTRY
  3798. @stereo2_mute_46:
  3799.     TIMERD_DI
  3800.     VISUAL    2,3
  3801.     move.b    #$7B,OPMADR        ;(CH4C2)TL
  3802.     OPMADR_WAIT
  3803.     move.b    #ZERO_TL,OPMDAT
  3804.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  3805.     OPMDAT_WAIT
  3806.     stereo_left_play    $78,a0    ;(CH1C2)TL
  3807.     move.l    #@stereo2_mute_61,TIMERD_VECTOR
  3808.     rte
  3809.  
  3810.     stereo_left_over    a0
  3811.     move.l    #@stereo2_mute_63,TIMERD_VECTOR
  3812.     rte
  3813.  
  3814.     STEREO_ENTRY
  3815. @stereo2_mute_28:
  3816.     TIMERD_DI
  3817.     VISUAL    2,3
  3818.     move.b    #$79,OPMADR        ;(CH2C2)TL
  3819.     OPMADR_WAIT
  3820.     move.b    #ZERO_TL,OPMDAT
  3821.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  3822.     OPMDAT_WAIT
  3823.     stereo_left_play    $7A,a0    ;(CH3C2)TL
  3824.     move.l    #@stereo2_mute_83,TIMERD_VECTOR
  3825.     rte
  3826.  
  3827.     stereo_left_over    a0
  3828.     move.l    #@stereo2_mute_81,TIMERD_VECTOR
  3829.     rte
  3830.  
  3831.     STEREO_ENTRY
  3832. @stereo2_mute_48:
  3833.     TIMERD_DI
  3834.     VISUAL    2,3
  3835.     move.b    #$7B,OPMADR        ;(CH4C2)TL
  3836.     OPMADR_WAIT
  3837.     move.b    #ZERO_TL,OPMDAT
  3838.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  3839.     OPMDAT_WAIT
  3840.     stereo_left_play    $78,a0    ;(CH1C2)TL
  3841.     move.l    #@stereo2_mute_81,TIMERD_VECTOR
  3842.     rte
  3843.  
  3844.     stereo_left_over    a0
  3845.     move.l    #@stereo2_mute_83,TIMERD_VECTOR
  3846.     rte
  3847.  
  3848.     STEREO_ENTRY
  3849. @stereo2_mute_61:
  3850.     TIMERD_DI
  3851.     VISUAL    2,3
  3852.     OPMDAT_WAIT            ;念のため
  3853.     move.b    #$7D,OPMADR        ;(CH6C2)TL
  3854.     OPMADR_WAIT
  3855.     move.b    #ZERO_TL,OPMDAT
  3856.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  3857.     OPMDAT_WAIT
  3858.     stereo_right_play    $7E,a0    ;(CH7C2)TL
  3859.     SETUP_MOVEW_IMM    INTERVAL_STEREO_1,counter
  3860.     move.l    #@stereo3_play_17,TIMERD_VECTOR
  3861.     rte
  3862.  
  3863.     stereo_right_over    a0
  3864.     SETUP_MOVEW_IMM    INTERVAL_STEREO_1,counter
  3865.     move.l    #@stereo3_play_15,TIMERD_VECTOR
  3866.     rte
  3867.  
  3868.     STEREO_ENTRY
  3869. @stereo2_mute_81:
  3870.     TIMERD_DI
  3871.     VISUAL    2,3
  3872.     OPMDAT_WAIT            ;念のため
  3873.     move.b    #$7F,OPMADR        ;(CH8C2)TL
  3874.     OPMADR_WAIT
  3875.     move.b    #ZERO_TL,OPMDAT
  3876.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  3877.     OPMDAT_WAIT
  3878.     stereo_right_play    $7C,a0    ;(CH5C2)TL
  3879.     SETUP_MOVEW_IMM    INTERVAL_STEREO_1,counter
  3880.     move.l    #@stereo3_play_15,TIMERD_VECTOR
  3881.     rte
  3882.  
  3883.     stereo_right_over    a0
  3884.     SETUP_MOVEW_IMM    INTERVAL_STEREO_1,counter
  3885.     move.l    #@stereo3_play_17,TIMERD_VECTOR
  3886.     rte
  3887.  
  3888.     STEREO_ENTRY
  3889. @stereo2_mute_63:
  3890.     TIMERD_DI
  3891.     VISUAL    2,3
  3892.     OPMDAT_WAIT            ;念のため
  3893.     move.b    #$7D,OPMADR        ;(CH6C2)TL
  3894.     OPMADR_WAIT
  3895.     move.b    #ZERO_TL,OPMDAT
  3896.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  3897.     OPMDAT_WAIT
  3898.     stereo_right_play    $7E,a0    ;(CH7C2)TL
  3899.     SETUP_MOVEW_IMM    INTERVAL_STEREO_1,counter
  3900.     move.l    #@stereo3_play_37,TIMERD_VECTOR
  3901.     rte
  3902.  
  3903.     stereo_right_over    a0
  3904.     SETUP_MOVEW_IMM    INTERVAL_STEREO_1,counter
  3905.     move.l    #@stereo3_play_35,TIMERD_VECTOR
  3906.     rte
  3907.  
  3908.     STEREO_ENTRY
  3909. @stereo2_mute_83:
  3910.     TIMERD_DI
  3911.     VISUAL    2,3
  3912.     OPMDAT_WAIT            ;念のため
  3913.     move.b    #$7F,OPMADR        ;(CH8C2)TL
  3914.     OPMADR_WAIT
  3915.     move.b    #ZERO_TL,OPMDAT
  3916.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  3917.     OPMDAT_WAIT
  3918.     stereo_right_play    $7C,a0    ;(CH5C2)TL
  3919.     SETUP_MOVEW_IMM    INTERVAL_STEREO_1,counter
  3920.     move.l    #@stereo3_play_35,TIMERD_VECTOR
  3921.     rte
  3922.  
  3923.     stereo_right_over    a0
  3924.     SETUP_MOVEW_IMM    INTERVAL_STEREO_1,counter
  3925.     move.l    #@stereo3_play_37,TIMERD_VECTOR
  3926.     rte
  3927.  
  3928. ;leftだけ0が出てこないままカウンタがオーバーフローした
  3929. ;leftだけmuteしてchを遷移する
  3930.     STEREO_ENTRY
  3931. @stereo2_mute_27:
  3932.     TIMERD_DI
  3933.     VISUAL    2,2
  3934.     move.b    #$79,OPMADR        ;(CH2C2)TL
  3935.     OPMADR_WAIT
  3936.     move.b    #ZERO_TL,OPMDAT
  3937.     SETUP_MOVEW_IMM    INTERVAL_STEREO_2,counter
  3938.     move.l    #@stereo3_start_37,TIMERD_VECTOR
  3939.     rte
  3940.  
  3941.     STEREO_ENTRY
  3942. @stereo2_mute_47:
  3943.     TIMERD_DI
  3944.     VISUAL    2,2
  3945.     move.b    #$7B,OPMADR        ;(CH4C2)TL
  3946.     OPMADR_WAIT
  3947.     move.b    #ZERO_TL,OPMDAT
  3948.     SETUP_MOVEW_IMM    INTERVAL_STEREO_2,counter
  3949.     move.l    #@stereo3_start_17,TIMERD_VECTOR
  3950.     rte
  3951.  
  3952.     STEREO_ENTRY
  3953. @stereo2_mute_25:
  3954.     TIMERD_DI
  3955.     VISUAL    2,2
  3956.     move.b    #$79,OPMADR        ;(CH2C2)TL
  3957.     OPMADR_WAIT
  3958.     move.b    #ZERO_TL,OPMDAT
  3959.     SETUP_MOVEW_IMM    INTERVAL_STEREO_2,counter
  3960.     move.l    #@stereo3_start_35,TIMERD_VECTOR
  3961.     rte
  3962.  
  3963.     STEREO_ENTRY
  3964. @stereo2_mute_45:
  3965.     TIMERD_DI
  3966.     VISUAL    2,2
  3967.     move.b    #$7B,OPMADR        ;(CH4C2)TL
  3968.     OPMADR_WAIT
  3969.     move.b    #ZERO_TL,OPMDAT
  3970.     SETUP_MOVEW_IMM    INTERVAL_STEREO_2,counter
  3971.     move.l    #@stereo3_start_15,TIMERD_VECTOR
  3972.     rte
  3973.  
  3974. ;rightだけ0が出てこないままカウンタがオーバーフローした
  3975. ;rightだけmuteしてchを遷移する
  3976.     STEREO_ENTRY
  3977. @stereo2_mute_36:
  3978.     TIMERD_DI
  3979.     VISUAL    2,4
  3980.     stereo_left_play    $7A,a0    ;(CH3C2)TL
  3981.     move.l    #@stereo2_mute_73,TIMERD_VECTOR
  3982.     rte
  3983.  
  3984.     stereo_left_over    a0
  3985.     move.l    #@stereo2_mute_71,TIMERD_VECTOR
  3986.     rte
  3987.  
  3988.     STEREO_ENTRY
  3989. @stereo2_mute_16:
  3990.     TIMERD_DI
  3991.     VISUAL    2,4
  3992.     stereo_left_play    $78,a0    ;(CH1C2)TL
  3993.     move.l    #@stereo2_mute_71,TIMERD_VECTOR
  3994.     rte
  3995.  
  3996.     stereo_left_over    a0
  3997.     move.l    #@stereo2_mute_73,TIMERD_VECTOR
  3998.     rte
  3999.  
  4000.     STEREO_ENTRY
  4001. @stereo2_mute_38:
  4002.     TIMERD_DI
  4003.     VISUAL    2,4
  4004.     stereo_left_play    $7A,a0    ;(CH3C2)TL
  4005.     move.l    #@stereo2_mute_53,TIMERD_VECTOR
  4006.     rte
  4007.  
  4008.     stereo_left_over    a0
  4009.     move.l    #@stereo2_mute_51,TIMERD_VECTOR
  4010.     rte
  4011.  
  4012.     STEREO_ENTRY
  4013. @stereo2_mute_18:
  4014.     TIMERD_DI
  4015.     VISUAL    2,4
  4016.     stereo_left_play    $78,a0    ;(CH1C2)TL
  4017.     move.l    #@stereo2_mute_51,TIMERD_VECTOR
  4018.     rte
  4019.  
  4020.     stereo_left_over    a0
  4021.     move.l    #@stereo2_mute_53,TIMERD_VECTOR
  4022.     rte
  4023.  
  4024.     STEREO_ENTRY
  4025. @stereo2_mute_73:
  4026.     TIMERD_DI
  4027.     VISUAL    2,4
  4028.     move.b    #$7D,OPMADR        ;(CH6C2)TL
  4029.     OPMADR_WAIT
  4030.     move.b    #ZERO_TL,OPMDAT
  4031.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  4032.     OPMDAT_WAIT
  4033.     stereo_right_play    $7E,a0    ;(CH7C2)TL
  4034.     SETUP_ADDIW_IMM    INTERVAL_STEREO_1,counter
  4035.     move.l    #@stereo3_play_37,TIMERD_VECTOR
  4036.     rte
  4037.  
  4038.     stereo_right_over    a0
  4039.     SETUP_ADDIW_IMM    INTERVAL_STEREO_1,counter
  4040.     move.l    #@stereo3_play_35,TIMERD_VECTOR
  4041.     rte
  4042.  
  4043.     STEREO_ENTRY
  4044. @stereo2_mute_53:
  4045.     TIMERD_DI
  4046.     VISUAL    2,4
  4047.     move.b    #$7F,OPMADR        ;(CH8C2)TL
  4048.     OPMADR_WAIT
  4049.     move.b    #ZERO_TL,OPMDAT
  4050.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  4051.     OPMDAT_WAIT
  4052.     stereo_right_play    $7C,a0    ;(CH5C2)TL
  4053.     SETUP_ADDIW_IMM    INTERVAL_STEREO_1,counter
  4054.     move.l    #@stereo3_play_35,TIMERD_VECTOR
  4055.     rte
  4056.  
  4057.     stereo_right_over    a0
  4058.     SETUP_ADDIW_IMM    INTERVAL_STEREO_1,counter
  4059.     move.l    #@stereo3_play_37,TIMERD_VECTOR
  4060.     rte
  4061.  
  4062.     STEREO_ENTRY
  4063. @stereo2_mute_71:
  4064.     TIMERD_DI
  4065.     VISUAL    2,4
  4066.     move.b    #$7D,OPMADR        ;(CH6C2)TL
  4067.     OPMADR_WAIT
  4068.     move.b    #ZERO_TL,OPMDAT
  4069.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  4070.     OPMDAT_WAIT
  4071.     stereo_right_play    $7E,a0    ;(CH7C2)TL
  4072.     SETUP_ADDIW_IMM    INTERVAL_STEREO_1,counter
  4073.     move.l    #@stereo3_play_17,TIMERD_VECTOR
  4074.     rte
  4075.  
  4076.     stereo_right_over    a0
  4077.     SETUP_ADDIW_IMM    INTERVAL_STEREO_1,counter
  4078.     move.l    #@stereo3_play_15,TIMERD_VECTOR
  4079.     rte
  4080.  
  4081.     STEREO_ENTRY
  4082. @stereo2_mute_51:
  4083.     TIMERD_DI
  4084.     VISUAL    2,4
  4085.     move.b    #$7F,OPMADR        ;(CH8C2)TL
  4086.     OPMADR_WAIT
  4087.     move.b    #ZERO_TL,OPMDAT
  4088.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  4089.     OPMDAT_WAIT
  4090.     stereo_right_play    $7C,a0    ;(CH5C2)TL
  4091.     SETUP_ADDIW_IMM    INTERVAL_STEREO_1,counter
  4092.     move.l    #@stereo3_play_15,TIMERD_VECTOR
  4093.     rte
  4094.  
  4095.     stereo_right_over    a0
  4096.     SETUP_ADDIW_IMM    INTERVAL_STEREO_1,counter
  4097.     move.l    #@stereo3_play_17,TIMERD_VECTOR
  4098.     rte
  4099.  
  4100. ;----------------------------------------------------------------
  4101. ;カウンタがオーバーフローするまでleft,rightの順に交互に出力する
  4102. ;スピードレートの調整はleftのみで行う
  4103. ;スピードレートの調整に伴うデータの採取の延期はleft/right共に1データ分
  4104. ;カウントはrightのみで行う
  4105.  
  4106. ;データにない0を挟んだ直後は必ず発音する
  4107.     STEREO_ENTRY
  4108. @stereo3_start_37:
  4109.     TIMERD_DI
  4110.     VISUAL    3,0
  4111.     stereo_left_play    $7A,a0    ;(CH3C2)TL
  4112.     move.l    #@stereo3_play_73,TIMERD_VECTOR
  4113.     rte
  4114.  
  4115.     stereo_left_over    a0
  4116.     move.l    #@stereo3_play_71,TIMERD_VECTOR
  4117.     rte
  4118.  
  4119.     STEREO_ENTRY
  4120. @stereo3_start_17:
  4121.     TIMERD_DI
  4122.     VISUAL    3,0
  4123.     stereo_left_play    $78,a0    ;(CH1C2)TL
  4124.     move.l    #@stereo3_play_71,TIMERD_VECTOR
  4125.     rte
  4126.  
  4127.     stereo_left_over    a0
  4128.     move.l    #@stereo3_play_73,TIMERD_VECTOR
  4129.     rte
  4130.  
  4131.     STEREO_ENTRY
  4132. @stereo3_start_35:
  4133.     TIMERD_DI
  4134.     VISUAL    3,0
  4135.     stereo_left_play    $7A,a0    ;(CH3C2)TL
  4136.     move.l    #@stereo3_play_53,TIMERD_VECTOR
  4137.     rte
  4138.  
  4139.     stereo_left_over    a0
  4140.     move.l    #@stereo3_play_51,TIMERD_VECTOR
  4141.     rte
  4142.  
  4143.     STEREO_ENTRY
  4144. @stereo3_start_15:
  4145.     TIMERD_DI
  4146.     VISUAL    3,0
  4147.     stereo_left_play    $78,a0    ;(CH1C2)TL
  4148.     move.l    #@stereo3_play_51,TIMERD_VECTOR
  4149.     rte
  4150.  
  4151.     stereo_left_over    a0
  4152.     move.l    #@stereo3_play_53,TIMERD_VECTOR
  4153.     rte
  4154.  
  4155.     STEREO_ENTRY
  4156. @stereo3_play_37:
  4157.     TIMERD_DI
  4158.     VISUAL    3,0
  4159.     stereo_left_play    $7A,a0    ;(CH3C2)TL
  4160.     move.l    #@stereo3_play_73,TIMERD_VECTOR
  4161.     rte
  4162.  
  4163.     stereo_left_over    a0
  4164.     move.l    #@stereo3_play_71,TIMERD_VECTOR
  4165.     rte
  4166.  
  4167.     STEREO_ENTRY
  4168. @stereo3_play_17:
  4169.     TIMERD_DI
  4170.     VISUAL    3,0
  4171.     stereo_left_play    $78,a0    ;(CH1C2)TL
  4172.     move.l    #@stereo3_play_71,TIMERD_VECTOR
  4173.     rte
  4174.  
  4175.     stereo_left_over    a0
  4176.     move.l    #@stereo3_play_73,TIMERD_VECTOR
  4177.     rte
  4178.  
  4179.     STEREO_ENTRY
  4180. @stereo3_play_35:
  4181.     TIMERD_DI
  4182.     VISUAL    3,0
  4183.     stereo_left_play    $7A,a0    ;(CH3C2)TL
  4184.     move.l    #@stereo3_play_53,TIMERD_VECTOR
  4185.     rte
  4186.  
  4187.     stereo_left_over    a0
  4188.     move.l    #@stereo3_play_51,TIMERD_VECTOR
  4189.     rte
  4190.  
  4191.     STEREO_ENTRY
  4192. @stereo3_play_15:
  4193.     TIMERD_DI
  4194.     VISUAL    3,0
  4195.     stereo_left_play    $78,a0    ;(CH1C2)TL
  4196.     move.l    #@stereo3_play_51,TIMERD_VECTOR
  4197.     rte
  4198.  
  4199.     stereo_left_over    a0
  4200.     move.l    #@stereo3_play_53,TIMERD_VECTOR
  4201.     rte
  4202.  
  4203.     STEREO_ENTRY
  4204. @stereo3_play_73:
  4205.     TIMERD_DI
  4206.     VISUAL    3,0
  4207.     stereo_right_play    $7E,a0    ;(CH7C2)TL
  4208.     subq.w    #1,counter
  4209.     bcs    @f
  4210.     move.l    #@stereo3_play_37,TIMERD_VECTOR
  4211.     rte
  4212. @@:    SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  4213.     move.l    #@stereo3_ext_37,TIMERD_VECTOR
  4214.     rte
  4215.  
  4216.     stereo_right_over    a0
  4217.     subq.w    #1,counter
  4218.     bcs    @f
  4219.     move.l    #@stereo3_play_35,TIMERD_VECTOR
  4220.     rte
  4221. @@:    SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  4222.     move.l    #@stereo3_ext_35,TIMERD_VECTOR
  4223.     rte
  4224.  
  4225.     STEREO_ENTRY
  4226. @stereo3_play_53:
  4227.     TIMERD_DI
  4228.     VISUAL    3,0
  4229.     stereo_right_play    $7C,a0    ;(CH5C2)TL
  4230.     subq.w    #1,counter
  4231.     bcs    @f
  4232.     move.l    #@stereo3_play_35,TIMERD_VECTOR
  4233.     rte
  4234. @@:    SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  4235.     move.l    #@stereo3_ext_35,TIMERD_VECTOR
  4236.     rte
  4237.  
  4238.     stereo_right_over    a0
  4239.     subq.w    #1,counter
  4240.     bcs    @f
  4241.     move.l    #@stereo3_play_37,TIMERD_VECTOR
  4242.     rte
  4243. @@:    SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  4244.     move.l    #@stereo3_ext_37,TIMERD_VECTOR
  4245.     rte
  4246.  
  4247.     STEREO_ENTRY
  4248. @stereo3_play_71:
  4249.     TIMERD_DI
  4250.     VISUAL    3,0
  4251.     stereo_right_play    $7E,a0    ;(CH7C2)TL
  4252.     subq.w    #1,counter
  4253.     bcs    @f
  4254.     move.l    #@stereo3_play_17,TIMERD_VECTOR
  4255.     rte
  4256. @@:    SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  4257.     move.l    #@stereo3_ext_17,TIMERD_VECTOR
  4258.     rte
  4259.  
  4260.     stereo_right_over    a0
  4261.     subq.w    #1,counter
  4262.     bcs    @f
  4263.     move.l    #@stereo3_play_15,TIMERD_VECTOR
  4264.     rte
  4265. @@:    SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  4266.     move.l    #@stereo3_ext_15,TIMERD_VECTOR
  4267.     rte
  4268.  
  4269.     STEREO_ENTRY
  4270. @stereo3_play_51:
  4271.     TIMERD_DI
  4272.     VISUAL    3,0
  4273.     stereo_right_play    $7C,a0    ;(CH5C2)TL
  4274.     subq.w    #1,counter
  4275.     bcs    @f
  4276.     move.l    #@stereo3_play_15,TIMERD_VECTOR
  4277.     rte
  4278. @@:    SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  4279.     move.l    #@stereo3_ext_15,TIMERD_VECTOR
  4280.     rte
  4281.  
  4282.     stereo_right_over    a0
  4283.     subq.w    #1,counter
  4284.     bcs    @f
  4285.     move.l    #@stereo3_play_17,TIMERD_VECTOR
  4286.     rte
  4287. @@:    SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  4288.     move.l    #@stereo3_ext_17,TIMERD_VECTOR
  4289.     rte
  4290.  
  4291. ;カウンタがオーバーフローしたので,left/rightそれぞれ0が出てくるまで待ち,
  4292. ;0が出てきたら個々に次のchに遷移する
  4293. ;0が出てこなくてもカウンタがオーバーフローしたら強制的に次のchに遷移する
  4294. ;カウントはrightのみで行う
  4295.  
  4296. ;まだleft/right共に0が出てきていない
  4297.     STEREO_ENTRY
  4298. @stereo3_ext_37:
  4299.     TIMERD_DI
  4300.     VISUAL    3,1
  4301.     stereo_left_play    $7A,a0    ;(CH3C2)TL
  4302.     move.l    #@stereo3_ext_73,TIMERD_VECTOR
  4303.     rte
  4304.  
  4305.     stereo_left_over    a0
  4306.     move.l    #@stereo3_ext_72,TIMERD_VECTOR
  4307.     rte
  4308.  
  4309.     STEREO_ENTRY
  4310. @stereo3_ext_17:
  4311.     TIMERD_DI
  4312.     VISUAL    3,1
  4313.     stereo_left_play    $78,a0    ;(CH1C2)TL
  4314.     move.l    #@stereo3_ext_71,TIMERD_VECTOR
  4315.     rte
  4316.  
  4317.     stereo_left_over    a0
  4318.     move.l    #@stereo3_ext_74,TIMERD_VECTOR
  4319.     rte
  4320.  
  4321.     STEREO_ENTRY
  4322. @stereo3_ext_35:
  4323.     TIMERD_DI
  4324.     VISUAL    3,1
  4325.     stereo_left_play    $7A,a0    ;(CH3C2)TL
  4326.     move.l    #@stereo3_ext_53,TIMERD_VECTOR
  4327.     rte
  4328.  
  4329.     stereo_left_over    a0
  4330.     move.l    #@stereo3_ext_52,TIMERD_VECTOR
  4331.     rte
  4332.  
  4333.     STEREO_ENTRY
  4334. @stereo3_ext_15:
  4335.     TIMERD_DI
  4336.     VISUAL    3,1
  4337.     stereo_left_play    $78,a0    ;(CH1C2)TL
  4338.     move.l    #@stereo3_ext_51,TIMERD_VECTOR
  4339.     rte
  4340.  
  4341.     stereo_left_over    a0
  4342.     move.l    #@stereo3_ext_54,TIMERD_VECTOR
  4343.     rte
  4344.  
  4345.     STEREO_ENTRY
  4346. @stereo3_ext_73:
  4347.     TIMERD_DI
  4348.     VISUAL    3,1
  4349.     stereo_right_play    $7E,a0    ;(CH7C2)TL
  4350.     subq.w    #1,counter
  4351.     bcs    @f
  4352.     move.l    #@stereo3_ext_37,TIMERD_VECTOR
  4353.     rte
  4354. @@:    move.l    #@stereo3_mute_37,TIMERD_VECTOR
  4355.     rte
  4356.  
  4357.     stereo_right_over    a0
  4358.     subq.w    #1,counter
  4359.     bcs    @f
  4360.     move.l    #@stereo3_ext_35,TIMERD_VECTOR
  4361.     rte
  4362. @@:    move.l    #@stereo3_mute_36,TIMERD_VECTOR
  4363.     rte
  4364.  
  4365.     STEREO_ENTRY
  4366. @stereo3_ext_53:
  4367.     TIMERD_DI
  4368.     VISUAL    3,1
  4369.     stereo_right_play    $7C,a0    ;(CH5C2)TL
  4370.     subq.w    #1,counter
  4371.     bcs    @f
  4372.     move.l    #@stereo3_ext_35,TIMERD_VECTOR
  4373.     rte
  4374. @@:    move.l    #@stereo3_mute_35,TIMERD_VECTOR
  4375.     rte
  4376.  
  4377.     stereo_right_over    a0
  4378.     subq.w    #1,counter
  4379.     bcs    @f
  4380.     move.l    #@stereo3_ext_37,TIMERD_VECTOR
  4381.     rte
  4382. @@:    move.l    #@stereo3_mute_38,TIMERD_VECTOR
  4383.     rte
  4384.  
  4385.     STEREO_ENTRY
  4386. @stereo3_ext_71:
  4387.     TIMERD_DI
  4388.     VISUAL    3,1
  4389.     stereo_right_play    $7E,a0    ;(CH7C2)TL
  4390.     subq.w    #1,counter
  4391.     bcs    @f
  4392.     move.l    #@stereo3_ext_17,TIMERD_VECTOR
  4393.     rte
  4394. @@:    move.l    #@stereo3_mute_17,TIMERD_VECTOR
  4395.     rte
  4396.  
  4397.     stereo_right_over    a0
  4398.     subq.w    #1,counter
  4399.     bcs    @f
  4400.     move.l    #@stereo3_ext_15,TIMERD_VECTOR
  4401.     rte
  4402. @@:    move.l    #@stereo3_mute_16,TIMERD_VECTOR
  4403.     rte
  4404.  
  4405.     STEREO_ENTRY
  4406. @stereo3_ext_51:
  4407.     TIMERD_DI
  4408.     VISUAL    3,1
  4409.     stereo_right_play    $7C,a0    ;(CH5C2)TL
  4410.     subq.w    #1,counter
  4411.     bcs    @f
  4412.     move.l    #@stereo3_ext_15,TIMERD_VECTOR
  4413.     rte
  4414. @@:    move.l    #@stereo3_mute_15,TIMERD_VECTOR
  4415.     rte
  4416.  
  4417.     stereo_right_over    a0
  4418.     subq.w    #1,counter
  4419.     bcs    @f
  4420.     move.l    #@stereo3_ext_17,TIMERD_VECTOR
  4421.     rte
  4422. @@:    move.l    #@stereo3_mute_18,TIMERD_VECTOR
  4423.     rte
  4424.  
  4425. ;leftだけ0が出てきて次のchに遷移した
  4426. ;rightに0が出てきたら次のchに遷移する
  4427.     STEREO_ENTRY
  4428. @stereo3_ext_47:
  4429.     TIMERD_DI
  4430.     VISUAL    3,1
  4431.     stereo_left_play    $7B,a0    ;(CH4C2)TL
  4432.     move.l    #@stereo3_ext_74,TIMERD_VECTOR
  4433.     rte
  4434.  
  4435.     stereo_left_over    a0
  4436.     move.l    #@stereo3_ext_72,TIMERD_VECTOR
  4437.     rte
  4438.  
  4439.     STEREO_ENTRY
  4440. @stereo3_ext_27:
  4441.     TIMERD_DI
  4442.     VISUAL    3,1
  4443.     stereo_left_play    $79,a0    ;(CH2C2)TL
  4444.     move.l    #@stereo3_ext_72,TIMERD_VECTOR
  4445.     rte
  4446.  
  4447.     stereo_left_over    a0
  4448.     move.l    #@stereo3_ext_74,TIMERD_VECTOR
  4449.     rte
  4450.  
  4451.     STEREO_ENTRY
  4452. @stereo3_ext_45:
  4453.     TIMERD_DI
  4454.     VISUAL    3,1
  4455.     stereo_left_play    $7B,a0    ;(CH4C2)TL
  4456.     move.l    #@stereo3_ext_54,TIMERD_VECTOR
  4457.     rte
  4458.  
  4459.     stereo_left_over    a0
  4460.     move.l    #@stereo3_ext_52,TIMERD_VECTOR
  4461.     rte
  4462.  
  4463.     STEREO_ENTRY
  4464. @stereo3_ext_25:
  4465.     TIMERD_DI
  4466.     VISUAL    3,1
  4467.     stereo_left_play    $79,a0    ;(CH2C2)TL
  4468.     move.l    #@stereo3_ext_52,TIMERD_VECTOR
  4469.     rte
  4470.  
  4471.     stereo_left_over    a0
  4472.     move.l    #@stereo3_ext_54,TIMERD_VECTOR
  4473.     rte
  4474.  
  4475.     STEREO_ENTRY
  4476. @stereo3_ext_74:
  4477.     TIMERD_DI
  4478.     VISUAL    3,1
  4479.     stereo_right_play    $7E,a0    ;(CH7C2)TL
  4480.     subq.w    #1,counter
  4481.     bcs    @f
  4482.     move.l    #@stereo3_ext_47,TIMERD_VECTOR
  4483.     rte
  4484. @@:    move.l    #@stereo3_mute_47,TIMERD_VECTOR
  4485.     rte
  4486.  
  4487.     stereo_right_over    a0
  4488.     SETUP_ADDIW_IMM    INTERVAL_STEREO_LAST_2,counter
  4489.     move.l    #@stereo4_play_46,TIMERD_VECTOR
  4490.     rte
  4491.  
  4492.     STEREO_ENTRY
  4493. @stereo3_ext_54:
  4494.     TIMERD_DI
  4495.     VISUAL    3,1
  4496.     stereo_right_play    $7C,a0    ;(CH5C2)TL
  4497.     subq.w    #1,counter
  4498.     bcs    @f
  4499.     move.l    #@stereo3_ext_45,TIMERD_VECTOR
  4500.     rte
  4501. @@:    move.l    #@stereo3_mute_45,TIMERD_VECTOR
  4502.     rte
  4503.  
  4504.     stereo_right_over    a0
  4505.     SETUP_ADDIW_IMM    INTERVAL_STEREO_LAST_2,counter
  4506.     move.l    #@stereo4_play_48,TIMERD_VECTOR
  4507.     rte
  4508.  
  4509.     STEREO_ENTRY
  4510. @stereo3_ext_72:
  4511.     TIMERD_DI
  4512.     VISUAL    3,1
  4513.     stereo_right_play    $7E,a0    ;(CH7C2)TL
  4514.     subq.w    #1,counter
  4515.     bcs    @f
  4516.     move.l    #@stereo3_ext_27,TIMERD_VECTOR
  4517.     rte
  4518. @@:    move.l    #@stereo3_mute_27,TIMERD_VECTOR
  4519.     rte
  4520.  
  4521.     stereo_right_over    a0
  4522.     SETUP_ADDIW_IMM    INTERVAL_STEREO_LAST_2,counter
  4523.     move.l    #@stereo4_play_26,TIMERD_VECTOR
  4524.     rte
  4525.  
  4526.     STEREO_ENTRY
  4527. @stereo3_ext_52:
  4528.     TIMERD_DI
  4529.     VISUAL    3,1
  4530.     stereo_right_play    $7C,a0    ;(CH5C2)TL
  4531.     subq.w    #1,counter
  4532.     bcs    @f
  4533.     move.l    #@stereo3_ext_25,TIMERD_VECTOR
  4534.     rte
  4535. @@:    move.l    #@stereo3_mute_25,TIMERD_VECTOR
  4536.     rte
  4537.  
  4538.     stereo_right_over    a0
  4539.     SETUP_ADDIW_IMM    INTERVAL_STEREO_LAST_2,counter
  4540.     move.l    #@stereo4_play_28,TIMERD_VECTOR
  4541.     rte
  4542.  
  4543. ;rightだけ0が出てきて次のchに遷移した
  4544. ;leftに0が出てきたら次のchに遷移する
  4545.     STEREO_ENTRY
  4546. @stereo3_ext_38:
  4547.     TIMERD_DI
  4548.     VISUAL    3,1
  4549.     stereo_left_play    $7A,a0    ;(CH3C2)TL
  4550.     move.l    #@stereo3_ext_83,TIMERD_VECTOR
  4551.     rte
  4552.  
  4553.     stereo_left_over    a0
  4554.     SETUP_ADDIW_IMM    INTERVAL_STEREO_LAST_2,counter
  4555.     move.l    #@stereo4_play_82,TIMERD_VECTOR
  4556.     rte
  4557.  
  4558.     STEREO_ENTRY
  4559. @stereo3_ext_18:
  4560.     TIMERD_DI
  4561.     VISUAL    3,1
  4562.     stereo_left_play    $78,a0    ;(CH1C2)TL
  4563.     move.l    #@stereo3_ext_81,TIMERD_VECTOR
  4564.     rte
  4565.  
  4566.     stereo_left_over    a0
  4567.     SETUP_ADDIW_IMM    INTERVAL_STEREO_LAST_2,counter
  4568.     move.l    #@stereo4_play_84,TIMERD_VECTOR
  4569.     rte
  4570.  
  4571.     STEREO_ENTRY
  4572. @stereo3_ext_36:
  4573.     TIMERD_DI
  4574.     VISUAL    3,1
  4575.     stereo_left_play    $7A,a0    ;(CH3C2)TL
  4576.     move.l    #@stereo3_ext_63,TIMERD_VECTOR
  4577.     rte
  4578.  
  4579.     stereo_left_over    a0
  4580.     SETUP_ADDIW_IMM    INTERVAL_STEREO_LAST_2,counter
  4581.     move.l    #@stereo4_play_62,TIMERD_VECTOR
  4582.     rte
  4583.  
  4584.     STEREO_ENTRY
  4585. @stereo3_ext_16:
  4586.     TIMERD_DI
  4587.     VISUAL    3,1
  4588.     stereo_left_play    $78,a0    ;(CH1C2)TL
  4589.     move.l    #@stereo3_ext_61,TIMERD_VECTOR
  4590.     rte
  4591.  
  4592.     stereo_left_over    a0
  4593.     SETUP_ADDIW_IMM    INTERVAL_STEREO_LAST_2,counter
  4594.     move.l    #@stereo4_play_64,TIMERD_VECTOR
  4595.     rte
  4596.  
  4597.     STEREO_ENTRY
  4598. @stereo3_ext_83:
  4599.     TIMERD_DI
  4600.     VISUAL    3,1
  4601.     stereo_right_play    $7F,a0    ;(CH8C2)TL
  4602.     subq.w    #1,counter
  4603.     bcs    @f
  4604.     move.l    #@stereo3_ext_38,TIMERD_VECTOR
  4605.     rte
  4606. @@:    move.l    #@stereo3_mute_38,TIMERD_VECTOR
  4607.     rte
  4608.  
  4609.     stereo_right_over    a0
  4610.     subq.w    #1,counter
  4611.     bcs    @f
  4612.     move.l    #@stereo3_ext_36,TIMERD_VECTOR
  4613.     rte
  4614. @@:    move.l    #@stereo3_mute_36,TIMERD_VECTOR
  4615.     rte
  4616.  
  4617.     STEREO_ENTRY
  4618. @stereo3_ext_63:
  4619.     TIMERD_DI
  4620.     VISUAL    3,1
  4621.     stereo_right_play    $7D,a0    ;(CH6C2)TL
  4622.     subq.w    #1,counter
  4623.     bcs    @f
  4624.     move.l    #@stereo3_ext_36,TIMERD_VECTOR
  4625.     rte
  4626. @@:    move.l    #@stereo3_mute_36,TIMERD_VECTOR
  4627.     rte
  4628.  
  4629.     stereo_right_over    a0
  4630.     subq.w    #1,counter
  4631.     bcs    @f
  4632.     move.l    #@stereo3_ext_38,TIMERD_VECTOR
  4633.     rte
  4634. @@:    move.l    #@stereo3_mute_38,TIMERD_VECTOR
  4635.     rte
  4636.  
  4637.     STEREO_ENTRY
  4638. @stereo3_ext_81:
  4639.     TIMERD_DI
  4640.     VISUAL    3,1
  4641.     stereo_right_play    $7F,a0    ;(CH8C2)TL
  4642.     subq.w    #1,counter
  4643.     bcs    @f
  4644.     move.l    #@stereo3_ext_18,TIMERD_VECTOR
  4645.     rte
  4646. @@:    move.l    #@stereo3_mute_18,TIMERD_VECTOR
  4647.     rte
  4648.  
  4649.     stereo_right_over    a0
  4650.     subq.w    #1,counter
  4651.     bcs    @f
  4652.     move.l    #@stereo3_ext_16,TIMERD_VECTOR
  4653.     rte
  4654. @@:    move.l    #@stereo3_mute_16,TIMERD_VECTOR
  4655.     rte
  4656.  
  4657.     STEREO_ENTRY
  4658. @stereo3_ext_61:
  4659.     TIMERD_DI
  4660.     VISUAL    3,1
  4661.     stereo_right_play    $7D,a0    ;(CH6C2)TL
  4662.     subq.w    #1,counter
  4663.     bcs    @f
  4664.     move.l    #@stereo3_ext_16,TIMERD_VECTOR
  4665.     rte
  4666. @@:    move.l    #@stereo3_mute_16,TIMERD_VECTOR
  4667.     rte
  4668.  
  4669.     stereo_right_over    a0
  4670.     subq.w    #1,counter
  4671.     bcs    @f
  4672.     move.l    #@stereo3_ext_18,TIMERD_VECTOR
  4673.     rte
  4674. @@:    move.l    #@stereo3_mute_18,TIMERD_VECTOR
  4675.     rte
  4676.  
  4677. ;left/right共に0が出てこないままカウンタがオーバーフローした
  4678. ;left/right共にmuteしてchを遷移する
  4679.     STEREO_ENTRY
  4680. @stereo3_mute_37:
  4681.     TIMERD_DI
  4682.     VISUAL    3,3
  4683.     move.b    #$7A,OPMADR        ;(CH3C2)TL
  4684.     OPMADR_WAIT
  4685.     move.b    #ZERO_TL,OPMDAT
  4686.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  4687.     OPMDAT_WAIT
  4688.     stereo_left_play    $7B,a0    ;(CH4C2)TL
  4689.     move.l    #@stereo3_mute_74,TIMERD_VECTOR
  4690.     rte
  4691.  
  4692.     stereo_left_over    a0
  4693.     move.l    #@stereo3_mute_72,TIMERD_VECTOR
  4694.     rte
  4695.  
  4696.     STEREO_ENTRY
  4697. @stereo3_mute_17:
  4698.     TIMERD_DI
  4699.     VISUAL    3,3
  4700.     move.b    #$78,OPMADR        ;(CH1C2)TL
  4701.     OPMADR_WAIT
  4702.     move.b    #ZERO_TL,OPMDAT
  4703.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  4704.     OPMDAT_WAIT
  4705.     stereo_left_play    $79,a0    ;(CH2C2)TL
  4706.     move.l    #@stereo3_mute_72,TIMERD_VECTOR
  4707.     rte
  4708.  
  4709.     stereo_left_over    a0
  4710.     move.l    #@stereo3_mute_74,TIMERD_VECTOR
  4711.     rte
  4712.  
  4713.     STEREO_ENTRY
  4714. @stereo3_mute_35:
  4715.     TIMERD_DI
  4716.     VISUAL    3,3
  4717.     move.b    #$7A,OPMADR        ;(CH3C2)TL
  4718.     OPMADR_WAIT
  4719.     move.b    #ZERO_TL,OPMDAT
  4720.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  4721.     OPMDAT_WAIT
  4722.     stereo_left_play    $7B,a0    ;(CH4C2)TL
  4723.     move.l    #@stereo3_mute_54,TIMERD_VECTOR
  4724.     rte
  4725.  
  4726.     stereo_left_over    a0
  4727.     move.l    #@stereo3_mute_52,TIMERD_VECTOR
  4728.     rte
  4729.  
  4730.     STEREO_ENTRY
  4731. @stereo3_mute_15:
  4732.     TIMERD_DI
  4733.     VISUAL    3,3
  4734.     move.b    #$78,OPMADR        ;(CH1C2)TL
  4735.     OPMADR_WAIT
  4736.     move.b    #ZERO_TL,OPMDAT
  4737.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  4738.     OPMDAT_WAIT
  4739.     stereo_left_play    $79,a0    ;(CH2C2)TL
  4740.     move.l    #@stereo3_mute_52,TIMERD_VECTOR
  4741.     rte
  4742.  
  4743.     stereo_left_over    a0
  4744.     move.l    #@stereo3_mute_54,TIMERD_VECTOR
  4745.     rte
  4746.  
  4747.     STEREO_ENTRY
  4748. @stereo3_mute_72:
  4749.     TIMERD_DI
  4750.     VISUAL    3,3
  4751.     OPMDAT_WAIT            ;念のため
  4752.     move.b    #$7E,OPMADR        ;(CH7C2)TL
  4753.     OPMADR_WAIT
  4754.     move.b    #ZERO_TL,OPMDAT
  4755.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  4756.     OPMDAT_WAIT
  4757.     stereo_right_play    $7F,a0    ;(CH8C2)TL
  4758.     SETUP_MOVEW_IMM    INTERVAL_STEREO_LAST_1,counter
  4759.     move.l    #@stereo4_play_28,TIMERD_VECTOR
  4760.     rte
  4761.  
  4762.     stereo_right_over    a0
  4763.     SETUP_MOVEW_IMM    INTERVAL_STEREO_LAST_1,counter
  4764.     move.l    #@stereo4_play_26,TIMERD_VECTOR
  4765.     rte
  4766.  
  4767.     STEREO_ENTRY
  4768. @stereo3_mute_52:
  4769.     TIMERD_DI
  4770.     VISUAL    3,3
  4771.     OPMDAT_WAIT            ;念のため
  4772.     move.b    #$7C,OPMADR        ;(CH5C2)TL
  4773.     OPMADR_WAIT
  4774.     move.b    #ZERO_TL,OPMDAT
  4775.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  4776.     OPMDAT_WAIT
  4777.     stereo_right_play    $7D,a0    ;(CH6C2)TL
  4778.     SETUP_MOVEW_IMM    INTERVAL_STEREO_LAST_1,counter
  4779.     move.l    #@stereo4_play_26,TIMERD_VECTOR
  4780.     rte
  4781.  
  4782.     stereo_right_over    a0
  4783.     SETUP_MOVEW_IMM    INTERVAL_STEREO_LAST_1,counter
  4784.     move.l    #@stereo4_play_28,TIMERD_VECTOR
  4785.     rte
  4786.  
  4787.     STEREO_ENTRY
  4788. @stereo3_mute_74:
  4789.     TIMERD_DI
  4790.     VISUAL    3,3
  4791.     OPMDAT_WAIT            ;念のため
  4792.     move.b    #$7E,OPMADR        ;(CH7C2)TL
  4793.     OPMADR_WAIT
  4794.     move.b    #ZERO_TL,OPMDAT
  4795.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  4796.     OPMDAT_WAIT
  4797.     stereo_right_play    $7F,a0    ;(CH8C2)TL
  4798.     SETUP_MOVEW_IMM    INTERVAL_STEREO_LAST_1,counter
  4799.     move.l    #@stereo4_play_48,TIMERD_VECTOR
  4800.     rte
  4801.  
  4802.     stereo_right_over    a0
  4803.     SETUP_MOVEW_IMM    INTERVAL_STEREO_LAST_1,counter
  4804.     move.l    #@stereo4_play_46,TIMERD_VECTOR
  4805.     rte
  4806.  
  4807.     STEREO_ENTRY
  4808. @stereo3_mute_54:
  4809.     TIMERD_DI
  4810.     VISUAL    3,3
  4811.     OPMDAT_WAIT            ;念のため
  4812.     move.b    #$7C,OPMADR        ;(CH5C2)TL
  4813.     OPMADR_WAIT
  4814.     move.b    #ZERO_TL,OPMDAT
  4815.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  4816.     OPMDAT_WAIT
  4817.     stereo_right_play    $7D,a0    ;(CH6C2)TL
  4818.     SETUP_MOVEW_IMM    INTERVAL_STEREO_LAST_1,counter
  4819.     move.l    #@stereo4_play_46,TIMERD_VECTOR
  4820.     rte
  4821.  
  4822.     stereo_right_over    a0
  4823.     SETUP_MOVEW_IMM    INTERVAL_STEREO_LAST_1,counter
  4824.     move.l    #@stereo4_play_48,TIMERD_VECTOR
  4825.     rte
  4826.  
  4827. ;leftだけ0が出てこないままカウンタがオーバーフローした
  4828. ;leftだけmuteしてchを遷移する
  4829.     STEREO_ENTRY
  4830. @stereo3_mute_38:
  4831.     TIMERD_DI
  4832.     VISUAL    3,2
  4833.     move.b    #$7A,OPMADR        ;(CH3C2)TL
  4834.     OPMADR_WAIT
  4835.     move.b    #ZERO_TL,OPMDAT
  4836.     SETUP_MOVEW_IMM    INTERVAL_STEREO_LAST_2,counter
  4837.     move.l    #@stereo4_start_48,TIMERD_VECTOR
  4838.     rte
  4839.  
  4840.     STEREO_ENTRY
  4841. @stereo3_mute_18:
  4842.     TIMERD_DI
  4843.     VISUAL    3,2
  4844.     move.b    #$78,OPMADR        ;(CH1C2)TL
  4845.     OPMADR_WAIT
  4846.     move.b    #ZERO_TL,OPMDAT
  4847.     SETUP_MOVEW_IMM    INTERVAL_STEREO_LAST_2,counter
  4848.     move.l    #@stereo4_start_28,TIMERD_VECTOR
  4849.     rte
  4850.  
  4851.     STEREO_ENTRY
  4852. @stereo3_mute_36:
  4853.     TIMERD_DI
  4854.     VISUAL    3,2
  4855.     move.b    #$7A,OPMADR        ;(CH3C2)TL
  4856.     OPMADR_WAIT
  4857.     move.b    #ZERO_TL,OPMDAT
  4858.     SETUP_MOVEW_IMM    INTERVAL_STEREO_LAST_2,counter
  4859.     move.l    #@stereo4_start_46,TIMERD_VECTOR
  4860.     rte
  4861.  
  4862.     STEREO_ENTRY
  4863. @stereo3_mute_16:
  4864.     TIMERD_DI
  4865.     VISUAL    3,2
  4866.     move.b    #$78,OPMADR        ;(CH1C2)TL
  4867.     OPMADR_WAIT
  4868.     move.b    #ZERO_TL,OPMDAT
  4869.     SETUP_MOVEW_IMM    INTERVAL_STEREO_LAST_2,counter
  4870.     move.l    #@stereo4_start_26,TIMERD_VECTOR
  4871.     rte
  4872.  
  4873. ;rightだけ0が出てこないままカウンタがオーバーフローした
  4874. ;rightだけmuteしてchを遷移する
  4875.     STEREO_ENTRY
  4876. @stereo3_mute_47:
  4877.     TIMERD_DI
  4878.     VISUAL    3,4
  4879.     stereo_left_play    $7B,a0    ;(CH4C2)TL
  4880.     move.l    #@stereo3_mute_84,TIMERD_VECTOR
  4881.     rte
  4882.  
  4883.     stereo_left_over    a0
  4884.     move.l    #@stereo3_mute_82,TIMERD_VECTOR
  4885.     rte
  4886.  
  4887.     STEREO_ENTRY
  4888. @stereo3_mute_27:
  4889.     TIMERD_DI
  4890.     VISUAL    3,4
  4891.     stereo_left_play    $79,a0    ;(CH2C2)TL
  4892.     move.l    #@stereo3_mute_82,TIMERD_VECTOR
  4893.     rte
  4894.  
  4895.     stereo_left_over    a0
  4896.     move.l    #@stereo3_mute_84,TIMERD_VECTOR
  4897.     rte
  4898.  
  4899.     STEREO_ENTRY
  4900. @stereo3_mute_45:
  4901.     TIMERD_DI
  4902.     VISUAL    3,4
  4903.     stereo_left_play    $7B,a0    ;(CH4C2)TL
  4904.     move.l    #@stereo3_mute_64,TIMERD_VECTOR
  4905.     rte
  4906.  
  4907.     stereo_left_over    a0
  4908.     move.l    #@stereo3_mute_62,TIMERD_VECTOR
  4909.     rte
  4910.  
  4911.     STEREO_ENTRY
  4912. @stereo3_mute_25:
  4913.     TIMERD_DI
  4914.     VISUAL    3,4
  4915.     stereo_left_play    $79,a0    ;(CH2C2)TL
  4916.     move.l    #@stereo3_mute_62,TIMERD_VECTOR
  4917.     rte
  4918.  
  4919.     stereo_left_over    a0
  4920.     move.l    #@stereo3_mute_64,TIMERD_VECTOR
  4921.     rte
  4922.  
  4923.     STEREO_ENTRY
  4924. @stereo3_mute_84:
  4925.     TIMERD_DI
  4926.     VISUAL    3,4
  4927.     move.b    #$7E,OPMADR        ;(CH7C2)TL
  4928.     OPMADR_WAIT
  4929.     move.b    #ZERO_TL,OPMDAT
  4930.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  4931.     OPMDAT_WAIT
  4932.     stereo_right_play    $7F,a0    ;(CH8C2)TL
  4933.     SETUP_ADDIW_IMM    INTERVAL_STEREO_LAST_1,counter
  4934.     move.l    #@stereo4_play_48,TIMERD_VECTOR
  4935.     rte
  4936.  
  4937.     stereo_right_over    a0
  4938.     SETUP_ADDIW_IMM    INTERVAL_STEREO_LAST_1,counter
  4939.     move.l    #@stereo4_play_46,TIMERD_VECTOR
  4940.     rte
  4941.  
  4942.     STEREO_ENTRY
  4943. @stereo3_mute_64:
  4944.     TIMERD_DI
  4945.     VISUAL    3,4
  4946.     move.b    #$7C,OPMADR        ;(CH5C2)TL
  4947.     OPMADR_WAIT
  4948.     move.b    #ZERO_TL,OPMDAT
  4949.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  4950.     OPMDAT_WAIT
  4951.     stereo_right_play    $7D,a0    ;(CH6C2)TL
  4952.     SETUP_ADDIW_IMM    INTERVAL_STEREO_LAST_1,counter
  4953.     move.l    #@stereo4_play_46,TIMERD_VECTOR
  4954.     rte
  4955.  
  4956.     stereo_right_over    a0
  4957.     SETUP_ADDIW_IMM    INTERVAL_STEREO_LAST_1,counter
  4958.     move.l    #@stereo4_play_48,TIMERD_VECTOR
  4959.     rte
  4960.  
  4961.     STEREO_ENTRY
  4962. @stereo3_mute_82:
  4963.     TIMERD_DI
  4964.     VISUAL    3,4
  4965.     move.b    #$7E,OPMADR        ;(CH7C2)TL
  4966.     OPMADR_WAIT
  4967.     move.b    #ZERO_TL,OPMDAT
  4968.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  4969.     OPMDAT_WAIT
  4970.     stereo_right_play    $7F,a0    ;(CH8C2)TL
  4971.     SETUP_ADDIW_IMM    INTERVAL_STEREO_LAST_1,counter
  4972.     move.l    #@stereo4_play_28,TIMERD_VECTOR
  4973.     rte
  4974.  
  4975.     stereo_right_over    a0
  4976.     SETUP_ADDIW_IMM    INTERVAL_STEREO_LAST_1,counter
  4977.     move.l    #@stereo4_play_26,TIMERD_VECTOR
  4978.     rte
  4979.  
  4980.     STEREO_ENTRY
  4981. @stereo3_mute_62:
  4982.     TIMERD_DI
  4983.     VISUAL    3,4
  4984.     move.b    #$7C,OPMADR        ;(CH5C2)TL
  4985.     OPMADR_WAIT
  4986.     move.b    #ZERO_TL,OPMDAT
  4987.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  4988.     OPMDAT_WAIT
  4989.     stereo_right_play    $7D,a0    ;(CH6C2)TL
  4990.     SETUP_ADDIW_IMM    INTERVAL_STEREO_LAST_1,counter
  4991.     move.l    #@stereo4_play_26,TIMERD_VECTOR
  4992.     rte
  4993.  
  4994.     stereo_right_over    a0
  4995.     SETUP_ADDIW_IMM    INTERVAL_STEREO_LAST_1,counter
  4996.     move.l    #@stereo4_play_28,TIMERD_VECTOR
  4997.     rte
  4998.  
  4999. ;----------------------------------------------------------------
  5000. ;カウンタがオーバーフローするまでleft,rightの順に交互に出力する
  5001. ;スピードレートの調整はleftのみで行う
  5002. ;スピードレートの調整に伴うデータの採取の延期はleft/right共に1データ分
  5003. ;カウントはrightのみで行う
  5004.  
  5005. ;データにない0を挟んだ直後は必ず発音する
  5006.     STEREO_ENTRY
  5007. @stereo4_start_48:
  5008.     TIMERD_DI
  5009.     VISUAL    4,0
  5010.     stereo_left_play    $7B,a0    ;(CH4C2)TL
  5011.     move.l    #@stereo4_play_84,TIMERD_VECTOR
  5012.     rte
  5013.  
  5014.     stereo_left_over    a0
  5015.     move.l    #@stereo4_play_82,TIMERD_VECTOR
  5016.     rte
  5017.  
  5018.     STEREO_ENTRY
  5019. @stereo4_start_28:
  5020.     TIMERD_DI
  5021.     VISUAL    4,0
  5022.     stereo_left_play    $79,a0    ;(CH2C2)TL
  5023.     move.l    #@stereo4_play_82,TIMERD_VECTOR
  5024.     rte
  5025.  
  5026.     stereo_left_over    a0
  5027.     move.l    #@stereo4_play_84,TIMERD_VECTOR
  5028.     rte
  5029.  
  5030.     STEREO_ENTRY
  5031. @stereo4_start_46:
  5032.     TIMERD_DI
  5033.     VISUAL    4,0
  5034.     stereo_left_play    $7B,a0    ;(CH4C2)TL
  5035.     move.l    #@stereo4_play_64,TIMERD_VECTOR
  5036.     rte
  5037.  
  5038.     stereo_left_over    a0
  5039.     move.l    #@stereo4_play_62,TIMERD_VECTOR
  5040.     rte
  5041.  
  5042.     STEREO_ENTRY
  5043. @stereo4_start_26:
  5044.     TIMERD_DI
  5045.     VISUAL    4,0
  5046.     stereo_left_play    $79,a0    ;(CH2C2)TL
  5047.     move.l    #@stereo4_play_62,TIMERD_VECTOR
  5048.     rte
  5049.  
  5050.     stereo_left_over    a0
  5051.     move.l    #@stereo4_play_64,TIMERD_VECTOR
  5052.     rte
  5053.  
  5054.     STEREO_ENTRY
  5055. @stereo4_play_48:
  5056.     TIMERD_DI
  5057.     VISUAL    4,0
  5058.     stereo_left_play    $7B,a0    ;(CH4C2)TL
  5059.     move.l    #@stereo4_play_84,TIMERD_VECTOR
  5060.     rte
  5061.  
  5062.     stereo_left_over    a0
  5063.     move.l    #@stereo4_play_82,TIMERD_VECTOR
  5064.     rte
  5065.  
  5066.     STEREO_ENTRY
  5067. @stereo4_play_28:
  5068.     TIMERD_DI
  5069.     VISUAL    4,0
  5070.     stereo_left_play    $79,a0    ;(CH2C2)TL
  5071.     move.l    #@stereo4_play_82,TIMERD_VECTOR
  5072.     rte
  5073.  
  5074.     stereo_left_over    a0
  5075.     move.l    #@stereo4_play_84,TIMERD_VECTOR
  5076.     rte
  5077.  
  5078.     STEREO_ENTRY
  5079. @stereo4_play_46:
  5080.     TIMERD_DI
  5081.     VISUAL    4,0
  5082.     stereo_left_play    $7B,a0    ;(CH4C2)TL
  5083.     move.l    #@stereo4_play_64,TIMERD_VECTOR
  5084.     rte
  5085.  
  5086.     stereo_left_over    a0
  5087.     move.l    #@stereo4_play_62,TIMERD_VECTOR
  5088.     rte
  5089.  
  5090.     STEREO_ENTRY
  5091. @stereo4_play_26:
  5092.     TIMERD_DI
  5093.     VISUAL    4,0
  5094.     stereo_left_play    $79,a0    ;(CH2C2)TL
  5095.     move.l    #@stereo4_play_62,TIMERD_VECTOR
  5096.     rte
  5097.  
  5098.     stereo_left_over    a0
  5099.     move.l    #@stereo4_play_64,TIMERD_VECTOR
  5100.     rte
  5101.  
  5102.     STEREO_ENTRY
  5103. @stereo4_play_84:
  5104.     TIMERD_DI
  5105.     VISUAL    4,0
  5106.     stereo_right_play    $7F,a0    ;(CH8C2)TL
  5107.     subq.w    #1,counter
  5108.     bcs    @f
  5109.     move.l    #@stereo4_play_48,TIMERD_VECTOR
  5110.     rte
  5111. @@:    move.l    #@stereo4_last_48,TIMERD_VECTOR
  5112.     rte
  5113.  
  5114.     stereo_right_over    a0
  5115.     subq.w    #1,counter
  5116.     bcs    @f
  5117.     move.l    #@stereo4_play_46,TIMERD_VECTOR
  5118.     rte
  5119. @@:    move.l    #@stereo4_last_46,TIMERD_VECTOR
  5120.     rte
  5121.  
  5122.     STEREO_ENTRY
  5123. @stereo4_play_64:
  5124.     TIMERD_DI
  5125.     VISUAL    4,0
  5126.     stereo_right_play    $7D,a0    ;(CH6C2)TL
  5127.     subq.w    #1,counter
  5128.     bcs    @f
  5129.     move.l    #@stereo4_play_46,TIMERD_VECTOR
  5130.     rte
  5131. @@:    move.l    #@stereo4_last_46,TIMERD_VECTOR
  5132.     rte
  5133.  
  5134.     stereo_right_over    a0
  5135.     subq.w    #1,counter
  5136.     bcs    @f
  5137.     move.l    #@stereo4_play_48,TIMERD_VECTOR
  5138.     rte
  5139. @@:    move.l    #@stereo4_last_48,TIMERD_VECTOR
  5140.     rte
  5141.  
  5142.     STEREO_ENTRY
  5143. @stereo4_play_82:
  5144.     TIMERD_DI
  5145.     VISUAL    4,0
  5146.     stereo_right_play    $7F,a0    ;(CH8C2)TL
  5147.     subq.w    #1,counter
  5148.     bcs    @f
  5149.     move.l    #@stereo4_play_28,TIMERD_VECTOR
  5150.     rte
  5151. @@:    move.l    #@stereo4_last_28,TIMERD_VECTOR
  5152.     rte
  5153.  
  5154.     stereo_right_over    a0
  5155.     subq.w    #1,counter
  5156.     bcs    @f
  5157.     move.l    #@stereo4_play_26,TIMERD_VECTOR
  5158.     rte
  5159. @@:    move.l    #@stereo4_last_26,TIMERD_VECTOR
  5160.     rte
  5161.  
  5162.     STEREO_ENTRY
  5163. @stereo4_play_62:
  5164.     TIMERD_DI
  5165.     VISUAL    4,0
  5166.     stereo_right_play    $7D,a0    ;(CH6C2)TL
  5167.     subq.w    #1,counter
  5168.     bcs    @f
  5169.     move.l    #@stereo4_play_26,TIMERD_VECTOR
  5170.     rte
  5171. @@:    move.l    #@stereo4_last_26,TIMERD_VECTOR
  5172.     rte
  5173.  
  5174.     stereo_right_over    a0
  5175.     subq.w    #1,counter
  5176.     bcs    @f
  5177.     move.l    #@stereo4_play_28,TIMERD_VECTOR
  5178.     rte
  5179. @@:    move.l    #@stereo4_last_28,TIMERD_VECTOR
  5180.     rte
  5181.  
  5182. ;カウンタがオーバーフローしたので,以降はTIMERCのカウンタを監視しながら進む
  5183.     STEREO_ENTRY
  5184. @stereo4_last_48:
  5185.     TIMERD_DI
  5186.     VISUAL    4,0
  5187.     stereo_left_play    $7B,a0    ;(CH4C2)TL
  5188.     move.l    #@stereo4_last_84,TIMERD_VECTOR
  5189.     rte
  5190.  
  5191.     stereo_left_over    a0
  5192.     move.l    #@stereo4_last_82,TIMERD_VECTOR
  5193.     rte
  5194.  
  5195.     STEREO_ENTRY
  5196. @stereo4_last_28:
  5197.     TIMERD_DI
  5198.     VISUAL    4,0
  5199.     stereo_left_play    $79,a0    ;(CH2C2)TL
  5200.     move.l    #@stereo4_last_82,TIMERD_VECTOR
  5201.     rte
  5202.  
  5203.     stereo_left_over    a0
  5204.     move.l    #@stereo4_last_84,TIMERD_VECTOR
  5205.     rte
  5206.  
  5207.     STEREO_ENTRY
  5208. @stereo4_last_46:
  5209.     TIMERD_DI
  5210.     VISUAL    4,0
  5211.     stereo_left_play    $7B,a0    ;(CH4C2)TL
  5212.     move.l    #@stereo4_last_64,TIMERD_VECTOR
  5213.     rte
  5214.  
  5215.     stereo_left_over    a0
  5216.     move.l    #@stereo4_last_62,TIMERD_VECTOR
  5217.     rte
  5218.  
  5219.     STEREO_ENTRY
  5220. @stereo4_last_26:
  5221.     TIMERD_DI
  5222.     VISUAL    4,0
  5223.     stereo_left_play    $79,a0    ;(CH2C2)TL
  5224.     move.l    #@stereo4_last_62,TIMERD_VECTOR
  5225.     rte
  5226.  
  5227.     stereo_left_over    a0
  5228.     move.l    #@stereo4_last_64,TIMERD_VECTOR
  5229.     rte
  5230.  
  5231.     STEREO_ENTRY
  5232. @stereo4_last_84:
  5233.     TIMERD_DI
  5234.     VISUAL    4,0
  5235.     stereo_right_play    $7F,a0    ;(CH8C2)TL
  5236.     DELTA_CHECK
  5237.     move.l    #@stereo4_last_48,TIMERD_VECTOR
  5238.     rte
  5239.     DELTA_OVER
  5240.     SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  5241.     move.l    #@stereo4_ext_48,TIMERD_VECTOR
  5242.     rte
  5243.  
  5244.     stereo_right_over    a0
  5245.     DELTA_CHECK
  5246.     move.l    #@stereo4_last_46,TIMERD_VECTOR
  5247.     rte
  5248.     DELTA_OVER
  5249.     SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  5250.     move.l    #@stereo4_ext_46,TIMERD_VECTOR
  5251.     rte
  5252.  
  5253.     STEREO_ENTRY
  5254. @stereo4_last_64:
  5255.     TIMERD_DI
  5256.     VISUAL    4,0
  5257.     stereo_right_play    $7D,a0    ;(CH6C2)TL
  5258.     DELTA_CHECK
  5259.     move.l    #@stereo4_last_46,TIMERD_VECTOR
  5260.     rte
  5261.     DELTA_OVER
  5262.     SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  5263.     move.l    #@stereo4_ext_46,TIMERD_VECTOR
  5264.     rte
  5265.  
  5266.     stereo_right_over    a0
  5267.     DELTA_CHECK
  5268.     move.l    #@stereo4_last_48,TIMERD_VECTOR
  5269.     rte
  5270.     DELTA_OVER
  5271.     SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  5272.     move.l    #@stereo4_ext_48,TIMERD_VECTOR
  5273.     rte
  5274.  
  5275.     STEREO_ENTRY
  5276. @stereo4_last_82:
  5277.     TIMERD_DI
  5278.     VISUAL    4,0
  5279.     stereo_right_play    $7F,a0    ;(CH8C2)TL
  5280.     DELTA_CHECK
  5281.     move.l    #@stereo4_last_28,TIMERD_VECTOR
  5282.     rte
  5283.     DELTA_OVER
  5284.     SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  5285.     move.l    #@stereo4_ext_28,TIMERD_VECTOR
  5286.     rte
  5287.  
  5288.     stereo_right_over    a0
  5289.     DELTA_CHECK
  5290.     move.l    #@stereo4_last_26,TIMERD_VECTOR
  5291.     rte
  5292.     DELTA_OVER
  5293.     SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  5294.     move.l    #@stereo4_ext_26,TIMERD_VECTOR
  5295.     rte
  5296.  
  5297.     STEREO_ENTRY
  5298. @stereo4_last_62:
  5299.     TIMERD_DI
  5300.     VISUAL    4,0
  5301.     stereo_right_play    $7D,a0    ;(CH6C2)TL
  5302.     DELTA_CHECK
  5303.     move.l    #@stereo4_last_26,TIMERD_VECTOR
  5304.     rte
  5305.     DELTA_OVER
  5306.     SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  5307.     move.l    #@stereo4_ext_26,TIMERD_VECTOR
  5308.     rte
  5309.  
  5310.     stereo_right_over    a0
  5311.     DELTA_CHECK
  5312.     move.l    #@stereo4_last_28,TIMERD_VECTOR
  5313.     rte
  5314.     DELTA_OVER
  5315.     SETUP_MOVEW_IMM    MUTE_STEREO_DELAY_0,counter
  5316.     move.l    #@stereo4_ext_28,TIMERD_VECTOR
  5317.     rte
  5318.  
  5319. ;left/rightそれぞれ0が出てくるまで待ち,0が出てきたら個々に次のchに遷移する
  5320. ;0が出てこなくてもカウンタがオーバーフローしたら強制的に次のchに遷移する
  5321. ;カウントはrightのみで行う
  5322.  
  5323. ;まだleft/right共に0が出てきていない
  5324.     STEREO_ENTRY
  5325. @stereo4_ext_48:
  5326.     TIMERD_DI
  5327.     VISUAL    4,1
  5328.     stereo_left_play    $7B,a0    ;(CH4C2)TL
  5329.     move.l    #@stereo4_ext_84,TIMERD_VECTOR
  5330.     rte
  5331.  
  5332.     stereo_left_over    a0
  5333.     move.l    #@stereo4_ext_83,TIMERD_VECTOR
  5334.     rte
  5335.  
  5336.     STEREO_ENTRY
  5337. @stereo4_ext_28:
  5338.     TIMERD_DI
  5339.     VISUAL    4,1
  5340.     stereo_left_play    $79,a0    ;(CH2C2)TL
  5341.     move.l    #@stereo4_ext_82,TIMERD_VECTOR
  5342.     rte
  5343.  
  5344.     stereo_left_over    a0
  5345.     move.l    #@stereo4_ext_81,TIMERD_VECTOR
  5346.     rte
  5347.  
  5348.     STEREO_ENTRY
  5349. @stereo4_ext_46:
  5350.     TIMERD_DI
  5351.     VISUAL    4,1
  5352.     stereo_left_play    $7B,a0    ;(CH4C2)TL
  5353.     move.l    #@stereo4_ext_64,TIMERD_VECTOR
  5354.     rte
  5355.  
  5356.     stereo_left_over    a0
  5357.     move.l    #@stereo4_ext_63,TIMERD_VECTOR
  5358.     rte
  5359.  
  5360.     STEREO_ENTRY
  5361. @stereo4_ext_26:
  5362.     TIMERD_DI
  5363.     VISUAL    4,1
  5364.     stereo_left_play    $79,a0    ;(CH2C2)TL
  5365.     move.l    #@stereo4_ext_62,TIMERD_VECTOR
  5366.     rte
  5367.  
  5368.     stereo_left_over    a0
  5369.     move.l    #@stereo4_ext_61,TIMERD_VECTOR
  5370.     rte
  5371.  
  5372.     STEREO_ENTRY
  5373. @stereo4_ext_84:
  5374.     TIMERD_DI
  5375.     VISUAL    4,1
  5376.     stereo_right_play    $7F,a0    ;(CH8C2)TL
  5377.     subq.w    #1,counter
  5378.     bcs    @f
  5379.     move.l    #@stereo4_ext_48,TIMERD_VECTOR
  5380.     rte
  5381. @@:    move.l    #@stereo4_mute_48,TIMERD_VECTOR
  5382.     rte
  5383.  
  5384.     stereo_right_over    a0
  5385.     subq.w    #1,counter
  5386.     bcs    @f
  5387.     move.l    #@stereo4_ext_46,TIMERD_VECTOR
  5388.     rte
  5389. @@:    move.l    #@stereo4_mute_47,TIMERD_VECTOR
  5390.     rte
  5391.  
  5392.     STEREO_ENTRY
  5393. @stereo4_ext_64:
  5394.     TIMERD_DI
  5395.     VISUAL    4,1
  5396.     stereo_right_play    $7D,a0    ;(CH6C2)TL
  5397.     subq.w    #1,counter
  5398.     bcs    @f
  5399.     move.l    #@stereo4_ext_46,TIMERD_VECTOR
  5400.     rte
  5401. @@:    move.l    #@stereo4_mute_46,TIMERD_VECTOR
  5402.     rte
  5403.  
  5404.     stereo_right_over    a0
  5405.     subq.w    #1,counter
  5406.     bcs    @f
  5407.     move.l    #@stereo4_ext_48,TIMERD_VECTOR
  5408.     rte
  5409. @@:    move.l    #@stereo4_mute_45,TIMERD_VECTOR
  5410.     rte
  5411.  
  5412.     STEREO_ENTRY
  5413. @stereo4_ext_82:
  5414.     TIMERD_DI
  5415.     VISUAL    4,1
  5416.     stereo_right_play    $7F,a0    ;(CH8C2)TL
  5417.     subq.w    #1,counter
  5418.     bcs    @f
  5419.     move.l    #@stereo4_ext_28,TIMERD_VECTOR
  5420.     rte
  5421. @@:    move.l    #@stereo4_mute_28,TIMERD_VECTOR
  5422.     rte
  5423.  
  5424.     stereo_right_over    a0
  5425.     subq.w    #1,counter
  5426.     bcs    @f
  5427.     move.l    #@stereo4_ext_26,TIMERD_VECTOR
  5428.     rte
  5429. @@:    move.l    #@stereo4_mute_27,TIMERD_VECTOR
  5430.     rte
  5431.  
  5432.     STEREO_ENTRY
  5433. @stereo4_ext_62:
  5434.     TIMERD_DI
  5435.     VISUAL    4,1
  5436.     stereo_right_play    $7D,a0    ;(CH6C2)TL
  5437.     subq.w    #1,counter
  5438.     bcs    @f
  5439.     move.l    #@stereo4_ext_26,TIMERD_VECTOR
  5440.     rte
  5441. @@:    move.l    #@stereo4_mute_26,TIMERD_VECTOR
  5442.     rte
  5443.  
  5444.     stereo_right_over    a0
  5445.     subq.w    #1,counter
  5446.     bcs    @f
  5447.     move.l    #@stereo4_ext_28,TIMERD_VECTOR
  5448.     rte
  5449. @@:    move.l    #@stereo4_mute_25,TIMERD_VECTOR
  5450.     rte
  5451.  
  5452. ;leftだけ0が出てきて次のchに遷移した
  5453. ;rightに0が出てきたら次のchに遷移する
  5454.     STEREO_ENTRY
  5455. @stereo4_ext_18:
  5456.     TIMERD_DI
  5457.     VISUAL    4,1
  5458.     stereo_left_play    $78,a0    ;(CH1C2)TL
  5459.     move.l    #@stereo4_ext_81,TIMERD_VECTOR
  5460.     rte
  5461.  
  5462.     stereo_left_over    a0
  5463.     move.l    #@stereo4_ext_83,TIMERD_VECTOR
  5464.     rte
  5465.  
  5466.     STEREO_ENTRY
  5467. @stereo4_ext_38:
  5468.     TIMERD_DI
  5469.     VISUAL    4,1
  5470.     stereo_left_play    $7A,a0    ;(CH3C2)TL
  5471.     move.l    #@stereo4_ext_83,TIMERD_VECTOR
  5472.     rte
  5473.  
  5474.     stereo_left_over    a0
  5475.     move.l    #@stereo4_ext_81,TIMERD_VECTOR
  5476.     rte
  5477.  
  5478.     STEREO_ENTRY
  5479. @stereo4_ext_16:
  5480.     TIMERD_DI
  5481.     VISUAL    4,1
  5482.     stereo_left_play    $78,a0    ;(CH1C2)TL
  5483.     move.l    #@stereo4_ext_61,TIMERD_VECTOR
  5484.     rte
  5485.  
  5486.     stereo_left_over    a0
  5487.     move.l    #@stereo4_ext_63,TIMERD_VECTOR
  5488.     rte
  5489.  
  5490.     STEREO_ENTRY
  5491. @stereo4_ext_36:
  5492.     TIMERD_DI
  5493.     VISUAL    4,1
  5494.     stereo_left_play    $7A,a0    ;(CH3C2)TL
  5495.     move.l    #@stereo4_ext_63,TIMERD_VECTOR
  5496.     rte
  5497.  
  5498.     stereo_left_over    a0
  5499.     move.l    #@stereo4_ext_61,TIMERD_VECTOR
  5500.     rte
  5501.  
  5502.     STEREO_ENTRY
  5503. @stereo4_ext_81:
  5504.     TIMERD_DI
  5505.     VISUAL    4,1
  5506.     stereo_right_play    $7F,a0    ;(CH8C2)TL
  5507.     subq.w    #1,counter
  5508.     bcs    @f
  5509.     move.l    #@stereo4_ext_18,TIMERD_VECTOR
  5510.     rte
  5511. @@:    move.l    #@stereo4_mute_18,TIMERD_VECTOR
  5512.     rte
  5513.  
  5514.     stereo_right_over    a0
  5515.     SETUP_ADDIW_IMM    INTERVAL_STEREO_2,counter
  5516.     move.l    #@stereo1_play_17,TIMERD_VECTOR
  5517.     rte
  5518.  
  5519.     STEREO_ENTRY
  5520. @stereo4_ext_61:
  5521.     TIMERD_DI
  5522.     VISUAL    4,1
  5523.     stereo_right_play    $7D,a0    ;(CH6C2)TL
  5524.     subq.w    #1,counter
  5525.     bcs    @f
  5526.     move.l    #@stereo4_ext_16,TIMERD_VECTOR
  5527.     rte
  5528. @@:    move.l    #@stereo4_mute_16,TIMERD_VECTOR
  5529.     rte
  5530.  
  5531.     stereo_right_over    a0
  5532.     SETUP_ADDIW_IMM    INTERVAL_STEREO_2,counter
  5533.     move.l    #@stereo1_play_15,TIMERD_VECTOR
  5534.     rte
  5535.  
  5536.     STEREO_ENTRY
  5537. @stereo4_ext_83:
  5538.     TIMERD_DI
  5539.     VISUAL    4,1
  5540.     stereo_right_play    $7F,a0    ;(CH8C2)TL
  5541.     subq.w    #1,counter
  5542.     bcs    @f
  5543.     move.l    #@stereo4_ext_38,TIMERD_VECTOR
  5544.     rte
  5545. @@:    move.l    #@stereo4_mute_38,TIMERD_VECTOR
  5546.     rte
  5547.  
  5548.     stereo_right_over    a0
  5549.     SETUP_ADDIW_IMM    INTERVAL_STEREO_2,counter
  5550.     move.l    #@stereo1_play_37,TIMERD_VECTOR
  5551.     rte
  5552.  
  5553.     STEREO_ENTRY
  5554. @stereo4_ext_63:
  5555.     TIMERD_DI
  5556.     VISUAL    4,1
  5557.     stereo_right_play    $7D,a0    ;(CH6C2)TL
  5558.     subq.w    #1,counter
  5559.     bcs    @f
  5560.     move.l    #@stereo4_ext_36,TIMERD_VECTOR
  5561.     rte
  5562. @@:    move.l    #@stereo4_mute_36,TIMERD_VECTOR
  5563.     rte
  5564.  
  5565.     stereo_right_over    a0
  5566.     SETUP_ADDIW_IMM    INTERVAL_STEREO_2,counter
  5567.     move.l    #@stereo1_play_35,TIMERD_VECTOR
  5568.     rte
  5569.  
  5570. ;rightだけ0が出てきて次のchに遷移した
  5571. ;leftに0が出てきたら次のchに遷移する
  5572.     STEREO_ENTRY
  5573. @stereo4_ext_45:
  5574.     TIMERD_DI
  5575.     VISUAL    4,1
  5576.     stereo_left_play    $7B,a0    ;(CH4C2)TL
  5577.     move.l    #@stereo4_ext_54,TIMERD_VECTOR
  5578.     rte
  5579.  
  5580.     stereo_left_over    a0
  5581.     SETUP_ADDIW_IMM    INTERVAL_STEREO_2,counter
  5582.     move.l    #@stereo1_play_53,TIMERD_VECTOR
  5583.     rte
  5584.  
  5585.     STEREO_ENTRY
  5586. @stereo4_ext_25:
  5587.     TIMERD_DI
  5588.     VISUAL    4,1
  5589.     stereo_left_play    $79,a0    ;(CH2C2)TL
  5590.     move.l    #@stereo4_ext_52,TIMERD_VECTOR
  5591.     rte
  5592.  
  5593.     stereo_left_over    a0
  5594.     SETUP_ADDIW_IMM    INTERVAL_STEREO_2,counter
  5595.     move.l    #@stereo1_play_51,TIMERD_VECTOR
  5596.     rte
  5597.  
  5598.     STEREO_ENTRY
  5599. @stereo4_ext_47:
  5600.     TIMERD_DI
  5601.     VISUAL    4,1
  5602.     stereo_left_play    $7B,a0    ;(CH4C2)TL
  5603.     move.l    #@stereo4_ext_74,TIMERD_VECTOR
  5604.     rte
  5605.  
  5606.     stereo_left_over    a0
  5607.     SETUP_ADDIW_IMM    INTERVAL_STEREO_2,counter
  5608.     move.l    #@stereo1_play_73,TIMERD_VECTOR
  5609.     rte
  5610.  
  5611.     STEREO_ENTRY
  5612. @stereo4_ext_27:
  5613.     TIMERD_DI
  5614.     VISUAL    4,1
  5615.     stereo_left_play    $79,a0    ;(CH2C2)TL
  5616.     move.l    #@stereo4_ext_72,TIMERD_VECTOR
  5617.     rte
  5618.  
  5619.     stereo_left_over    a0
  5620.     SETUP_ADDIW_IMM    INTERVAL_STEREO_2,counter
  5621.     move.l    #@stereo1_play_71,TIMERD_VECTOR
  5622.     rte
  5623.  
  5624.     STEREO_ENTRY
  5625. @stereo4_ext_54:
  5626.     TIMERD_DI
  5627.     VISUAL    4,1
  5628.     stereo_right_play    $7C,a0    ;(CH5C2)TL
  5629.     subq.w    #1,counter
  5630.     bcs    @f
  5631.     move.l    #@stereo4_ext_45,TIMERD_VECTOR
  5632.     rte
  5633. @@:    move.l    #@stereo4_mute_45,TIMERD_VECTOR
  5634.     rte
  5635.  
  5636.     stereo_right_over    a0
  5637.     subq.w    #1,counter
  5638.     bcs    @f
  5639.     move.l    #@stereo4_ext_47,TIMERD_VECTOR
  5640.     rte
  5641. @@:    move.l    #@stereo4_mute_47,TIMERD_VECTOR
  5642.     rte
  5643.  
  5644.     STEREO_ENTRY
  5645. @stereo4_ext_74:
  5646.     TIMERD_DI
  5647.     VISUAL    4,1
  5648.     stereo_right_play    $7E,a0    ;(CH7C2)TL
  5649.     subq.w    #1,counter
  5650.     bcs    @f
  5651.     move.l    #@stereo4_ext_47,TIMERD_VECTOR
  5652.     rte
  5653. @@:    move.l    #@stereo4_mute_47,TIMERD_VECTOR
  5654.     rte
  5655.  
  5656.     stereo_right_over    a0
  5657.     subq.w    #1,counter
  5658.     bcs    @f
  5659.     move.l    #@stereo4_ext_45,TIMERD_VECTOR
  5660.     rte
  5661. @@:    move.l    #@stereo4_mute_45,TIMERD_VECTOR
  5662.     rte
  5663.  
  5664.     STEREO_ENTRY
  5665. @stereo4_ext_52:
  5666.     TIMERD_DI
  5667.     VISUAL    4,1
  5668.     stereo_right_play    $7C,a0    ;(CH5C2)TL
  5669.     subq.w    #1,counter
  5670.     bcs    @f
  5671.     move.l    #@stereo4_ext_25,TIMERD_VECTOR
  5672.     rte
  5673. @@:    move.l    #@stereo4_mute_25,TIMERD_VECTOR
  5674.     rte
  5675.  
  5676.     stereo_right_over    a0
  5677.     subq.w    #1,counter
  5678.     bcs    @f
  5679.     move.l    #@stereo4_ext_27,TIMERD_VECTOR
  5680.     rte
  5681. @@:    move.l    #@stereo4_mute_27,TIMERD_VECTOR
  5682.     rte
  5683.  
  5684.     STEREO_ENTRY
  5685. @stereo4_ext_72:
  5686.     TIMERD_DI
  5687.     VISUAL    4,1
  5688.     stereo_right_play    $7E,a0    ;(CH7C2)TL
  5689.     subq.w    #1,counter
  5690.     bcs    @f
  5691.     move.l    #@stereo4_ext_27,TIMERD_VECTOR
  5692.     rte
  5693. @@:    move.l    #@stereo4_mute_27,TIMERD_VECTOR
  5694.     rte
  5695.  
  5696.     stereo_right_over    a0
  5697.     subq.w    #1,counter
  5698.     bcs    @f
  5699.     move.l    #@stereo4_ext_25,TIMERD_VECTOR
  5700.     rte
  5701. @@:    move.l    #@stereo4_mute_25,TIMERD_VECTOR
  5702.     rte
  5703.  
  5704. ;left/right共に0が出てこないままカウンタがオーバーフローした
  5705. ;left/right共にmuteしてchを遷移する
  5706.     STEREO_ENTRY
  5707. @stereo4_mute_48:
  5708.     TIMERD_DI
  5709.     VISUAL    4,3
  5710.     move.b    #$7B,OPMADR        ;(CH4C2)TL
  5711.     OPMADR_WAIT
  5712.     move.b    #ZERO_TL,OPMDAT
  5713.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  5714.     OPMDAT_WAIT
  5715.     stereo_left_play    $78,a0    ;(CH1C2)TL
  5716.     move.l    #@stereo4_mute_81,TIMERD_VECTOR
  5717.     rte
  5718.  
  5719.     stereo_left_over    a0
  5720.     move.l    #@stereo4_mute_83,TIMERD_VECTOR
  5721.     rte
  5722.  
  5723.     STEREO_ENTRY
  5724. @stereo4_mute_28:
  5725.     TIMERD_DI
  5726.     VISUAL    4,3
  5727.     move.b    #$79,OPMADR        ;(CH2C2)TL
  5728.     OPMADR_WAIT
  5729.     move.b    #ZERO_TL,OPMDAT
  5730.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  5731.     OPMDAT_WAIT
  5732.     stereo_left_play    $7A,a0    ;(CH3C2)TL
  5733.     move.l    #@stereo4_mute_83,TIMERD_VECTOR
  5734.     rte
  5735.  
  5736.     stereo_left_over    a0
  5737.     move.l    #@stereo4_mute_81,TIMERD_VECTOR
  5738.     rte
  5739.  
  5740.     STEREO_ENTRY
  5741. @stereo4_mute_46:
  5742.     TIMERD_DI
  5743.     VISUAL    4,3
  5744.     move.b    #$7B,OPMADR        ;(CH4C2)TL
  5745.     OPMADR_WAIT
  5746.     move.b    #ZERO_TL,OPMDAT
  5747.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  5748.     OPMDAT_WAIT
  5749.     stereo_left_play    $78,a0    ;(CH1C2)TL
  5750.     move.l    #@stereo4_mute_61,TIMERD_VECTOR
  5751.     rte
  5752.  
  5753.     stereo_left_over    a0
  5754.     move.l    #@stereo4_mute_63,TIMERD_VECTOR
  5755.     rte
  5756.  
  5757.     STEREO_ENTRY
  5758. @stereo4_mute_26:
  5759.     TIMERD_DI
  5760.     VISUAL    4,3
  5761.     move.b    #$79,OPMADR        ;(CH2C2)TL
  5762.     OPMADR_WAIT
  5763.     move.b    #ZERO_TL,OPMDAT
  5764.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  5765.     OPMDAT_WAIT
  5766.     stereo_left_play    $7A,a0    ;(CH3C2)TL
  5767.     move.l    #@stereo4_mute_63,TIMERD_VECTOR
  5768.     rte
  5769.  
  5770.     stereo_left_over    a0
  5771.     move.l    #@stereo4_mute_61,TIMERD_VECTOR
  5772.     rte
  5773.  
  5774.     STEREO_ENTRY
  5775. @stereo4_mute_83:
  5776.     TIMERD_DI
  5777.     VISUAL    4,3
  5778.     OPMDAT_WAIT            ;念のため
  5779.     move.b    #$7F,OPMADR        ;(CH8C2)TL
  5780.     OPMADR_WAIT
  5781.     move.b    #ZERO_TL,OPMDAT
  5782.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  5783.     OPMDAT_WAIT
  5784.     stereo_right_play    $7C,a0    ;(CH5C2)TL
  5785.     SETUP_MOVEW_IMM    INTERVAL_STEREO_1,counter
  5786.     move.l    #@stereo1_play_35,TIMERD_VECTOR
  5787.     rte
  5788.  
  5789.     stereo_right_over    a0
  5790.     SETUP_MOVEW_IMM    INTERVAL_STEREO_1,counter
  5791.     move.l    #@stereo1_play_37,TIMERD_VECTOR
  5792.     rte
  5793.  
  5794.     STEREO_ENTRY
  5795. @stereo4_mute_63:
  5796.     TIMERD_DI
  5797.     VISUAL    4,3
  5798.     OPMDAT_WAIT            ;念のため
  5799.     move.b    #$7D,OPMADR        ;(CH6C2)TL
  5800.     OPMADR_WAIT
  5801.     move.b    #ZERO_TL,OPMDAT
  5802.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  5803.     OPMDAT_WAIT
  5804.     stereo_right_play    $7E,a0    ;(CH7C2)TL
  5805.     SETUP_MOVEW_IMM    INTERVAL_STEREO_1,counter
  5806.     move.l    #@stereo1_play_37,TIMERD_VECTOR
  5807.     rte
  5808.  
  5809.     stereo_right_over    a0
  5810.     SETUP_MOVEW_IMM    INTERVAL_STEREO_1,counter
  5811.     move.l    #@stereo1_play_35,TIMERD_VECTOR
  5812.     rte
  5813.  
  5814.     STEREO_ENTRY
  5815. @stereo4_mute_81:
  5816.     TIMERD_DI
  5817.     VISUAL    4,3
  5818.     OPMDAT_WAIT            ;念のため
  5819.     move.b    #$7F,OPMADR        ;(CH8C2)TL
  5820.     OPMADR_WAIT
  5821.     move.b    #ZERO_TL,OPMDAT
  5822.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  5823.     OPMDAT_WAIT
  5824.     stereo_right_play    $7C,a0    ;(CH5C2)TL
  5825.     SETUP_MOVEW_IMM    INTERVAL_STEREO_1,counter
  5826.     move.l    #@stereo1_play_15,TIMERD_VECTOR
  5827.     rte
  5828.  
  5829.     stereo_right_over    a0
  5830.     SETUP_MOVEW_IMM    INTERVAL_STEREO_1,counter
  5831.     move.l    #@stereo1_play_17,TIMERD_VECTOR
  5832.     rte
  5833.  
  5834.     STEREO_ENTRY
  5835. @stereo4_mute_61:
  5836.     TIMERD_DI
  5837.     VISUAL    4,3
  5838.     OPMDAT_WAIT            ;念のため
  5839.     move.b    #$7D,OPMADR        ;(CH6C2)TL
  5840.     OPMADR_WAIT
  5841.     move.b    #ZERO_TL,OPMDAT
  5842.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  5843.     OPMDAT_WAIT
  5844.     stereo_right_play    $7E,a0    ;(CH7C2)TL
  5845.     SETUP_MOVEW_IMM    INTERVAL_STEREO_1,counter
  5846.     move.l    #@stereo1_play_17,TIMERD_VECTOR
  5847.     rte
  5848.  
  5849.     stereo_right_over    a0
  5850.     SETUP_MOVEW_IMM    INTERVAL_STEREO_1,counter
  5851.     move.l    #@stereo1_play_15,TIMERD_VECTOR
  5852.     rte
  5853.  
  5854. ;leftだけ0が出てこないままカウンタがオーバーフローした
  5855. ;leftだけmuteしてchを遷移する
  5856.     STEREO_ENTRY
  5857. @stereo4_mute_45:
  5858.     TIMERD_DI
  5859.     VISUAL    4,2
  5860.     move.b    #$7B,OPMADR        ;(CH4C2)TL
  5861.     OPMADR_WAIT
  5862.     move.b    #ZERO_TL,OPMDAT
  5863.     SETUP_MOVEW_IMM    INTERVAL_STEREO_2,counter
  5864.     move.l    #@stereo1_start_15,TIMERD_VECTOR
  5865.     rte
  5866.  
  5867.     STEREO_ENTRY
  5868. @stereo4_mute_25:
  5869.     TIMERD_DI
  5870.     VISUAL    4,2
  5871.     move.b    #$79,OPMADR        ;(CH2C2)TL
  5872.     OPMADR_WAIT
  5873.     move.b    #ZERO_TL,OPMDAT
  5874.     SETUP_MOVEW_IMM    INTERVAL_STEREO_2,counter
  5875.     move.l    #@stereo1_start_35,TIMERD_VECTOR
  5876.     rte
  5877.  
  5878.     STEREO_ENTRY
  5879. @stereo4_mute_47:
  5880.     TIMERD_DI
  5881.     VISUAL    4,2
  5882.     move.b    #$7B,OPMADR        ;(CH4C2)TL
  5883.     OPMADR_WAIT
  5884.     move.b    #ZERO_TL,OPMDAT
  5885.     SETUP_MOVEW_IMM    INTERVAL_STEREO_2,counter
  5886.     move.l    #@stereo1_start_17,TIMERD_VECTOR
  5887.     rte
  5888.  
  5889.     STEREO_ENTRY
  5890. @stereo4_mute_27:
  5891.     TIMERD_DI
  5892.     VISUAL    4,2
  5893.     move.b    #$79,OPMADR        ;(CH2C2)TL
  5894.     OPMADR_WAIT
  5895.     move.b    #ZERO_TL,OPMDAT
  5896.     SETUP_MOVEW_IMM    INTERVAL_STEREO_2,counter
  5897.     move.l    #@stereo1_start_37,TIMERD_VECTOR
  5898.     rte
  5899.  
  5900. ;rightだけ0が出てこないままカウンタがオーバーフローした
  5901. ;rightだけmuteしてchを遷移する
  5902.     STEREO_ENTRY
  5903. @stereo4_mute_18:
  5904.     TIMERD_DI
  5905.     VISUAL    4,4
  5906.     stereo_left_play    $78,a0    ;(CH1C2)TL
  5907.     move.l    #@stereo4_mute_51,TIMERD_VECTOR
  5908.     rte
  5909.  
  5910.     stereo_left_over    a0
  5911.     move.l    #@stereo4_mute_53,TIMERD_VECTOR
  5912.     rte
  5913.  
  5914.     STEREO_ENTRY
  5915. @stereo4_mute_38:
  5916.     TIMERD_DI
  5917.     VISUAL    4,4
  5918.     stereo_left_play    $7A,a0    ;(CH3C2)TL
  5919.     move.l    #@stereo4_mute_53,TIMERD_VECTOR
  5920.     rte
  5921.  
  5922.     stereo_left_over    a0
  5923.     move.l    #@stereo4_mute_51,TIMERD_VECTOR
  5924.     rte
  5925.  
  5926.     STEREO_ENTRY
  5927. @stereo4_mute_16:
  5928.     TIMERD_DI
  5929.     VISUAL    4,4
  5930.     stereo_left_play    $78,a0    ;(CH1C2)TL
  5931.     move.l    #@stereo4_mute_71,TIMERD_VECTOR
  5932.     rte
  5933.  
  5934.     stereo_left_over    a0
  5935.     move.l    #@stereo4_mute_73,TIMERD_VECTOR
  5936.     rte
  5937.  
  5938.     STEREO_ENTRY
  5939. @stereo4_mute_36:
  5940.     TIMERD_DI
  5941.     VISUAL    4,4
  5942.     stereo_left_play    $7A,a0    ;(CH3C2)TL
  5943.     move.l    #@stereo4_mute_73,TIMERD_VECTOR
  5944.     rte
  5945.  
  5946.     stereo_left_over    a0
  5947.     move.l    #@stereo4_mute_71,TIMERD_VECTOR
  5948.     rte
  5949.  
  5950.     STEREO_ENTRY
  5951. @stereo4_mute_51:
  5952.     TIMERD_DI
  5953.     VISUAL    4,4
  5954.     move.b    #$7F,OPMADR        ;(CH8C2)TL
  5955.     OPMADR_WAIT
  5956.     move.b    #ZERO_TL,OPMDAT
  5957.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  5958.     OPMDAT_WAIT
  5959.     stereo_right_play    $7C,a0    ;(CH5C2)TL
  5960.     SETUP_ADDIW_IMM    INTERVAL_STEREO_1,counter
  5961.     move.l    #@stereo1_play_15,TIMERD_VECTOR
  5962.     rte
  5963.  
  5964.     stereo_right_over    a0
  5965.     SETUP_ADDIW_IMM    INTERVAL_STEREO_1,counter
  5966.     move.l    #@stereo1_play_17,TIMERD_VECTOR
  5967.     rte
  5968.  
  5969.     STEREO_ENTRY
  5970. @stereo4_mute_71:
  5971.     TIMERD_DI
  5972.     VISUAL    4,4
  5973.     move.b    #$7D,OPMADR        ;(CH6C2)TL
  5974.     OPMADR_WAIT
  5975.     move.b    #ZERO_TL,OPMDAT
  5976.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  5977.     OPMDAT_WAIT
  5978.     stereo_right_play    $7E,a0    ;(CH7C2)TL
  5979.     SETUP_ADDIW_IMM    INTERVAL_STEREO_1,counter
  5980.     move.l    #@stereo1_play_17,TIMERD_VECTOR
  5981.     rte
  5982.  
  5983.     stereo_right_over    a0
  5984.     SETUP_ADDIW_IMM    INTERVAL_STEREO_1,counter
  5985.     move.l    #@stereo1_play_15,TIMERD_VECTOR
  5986.     rte
  5987.  
  5988.     STEREO_ENTRY
  5989. @stereo4_mute_53:
  5990.     TIMERD_DI
  5991.     VISUAL    4,4
  5992.     move.b    #$7F,OPMADR        ;(CH8C2)TL
  5993.     OPMADR_WAIT
  5994.     move.b    #ZERO_TL,OPMDAT
  5995.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  5996.     OPMDAT_WAIT
  5997.     stereo_right_play    $7C,a0    ;(CH5C2)TL
  5998.     SETUP_ADDIW_IMM    INTERVAL_STEREO_1,counter
  5999.     move.l    #@stereo1_play_35,TIMERD_VECTOR
  6000.     rte
  6001.  
  6002.     stereo_right_over    a0
  6003.     SETUP_ADDIW_IMM    INTERVAL_STEREO_1,counter
  6004.     move.l    #@stereo1_play_37,TIMERD_VECTOR
  6005.     rte
  6006.  
  6007.     STEREO_ENTRY
  6008. @stereo4_mute_73:
  6009.     TIMERD_DI
  6010.     VISUAL    4,4
  6011.     move.b    #$7D,OPMADR        ;(CH6C2)TL
  6012.     OPMADR_WAIT
  6013.     move.b    #ZERO_TL,OPMDAT
  6014.                     ;次の割り込みに間に合わなくても最短時間で切り換える
  6015.     OPMDAT_WAIT
  6016.     stereo_right_play    $7E,a0    ;(CH7C2)TL
  6017.     SETUP_ADDIW_IMM    INTERVAL_STEREO_1,counter
  6018.     move.l    #@stereo1_play_37,TIMERD_VECTOR
  6019.     rte
  6020.  
  6021.     stereo_right_over    a0
  6022.     SETUP_ADDIW_IMM    INTERVAL_STEREO_1,counter
  6023.     move.l    #@stereo1_play_35,TIMERD_VECTOR
  6024.     rte
  6025.  
  6026. ;----------------------------------------------------------------
  6027.     .endm
  6028.  
  6029. mono_both_play    .macro    aw,an
  6030.     move.l    an,-(sp)        ;12
  6031.     movea.l    pointer,an        ;16
  6032.   .if aw
  6033.     OPMADR_WAIT
  6034.   .endif
  6035.     move.b    (an)+,OPMDAT        ;20
  6036.     bmi.s    55f            ;8/10
  6037.     move.l    an,pointer        ;20
  6038. 66:    movea.l    (sp)+,an        ;12
  6039.     .endm
  6040.  
  6041. mono_both_over    .macro    an
  6042. 33:    tst.b    (1,an)
  6043.     beq.s    44f
  6044.   .if CURRENT_TIME
  6045.     lea.l    nxttop,an        ;8
  6046.     move.l    (an)+,(an)        ;20    nxttop→pointer
  6047.     move.l    (an)+,(an)+        ;20    nxttop→curtop
  6048.     move.l    an,(nxttop-dummy_opm_data,an)    ;16    #dummy_opm_data→nxttop
  6049.   .else
  6050.     lea.l    nxttop,an        ;8
  6051.     move.l    (an)+,(an)+        ;20    nxttop→pointer
  6052.     move.l    an,(nxttop-dummy_opm_data,an)    ;16    #dummy_opm_data→nxttop
  6053.   .endif
  6054.     bra.s    77f            ;10
  6055. 44:
  6056.   .if CURRENT_TIME
  6057.     lea.l    nxttop,an        ;8
  6058.     move.l    (an)+,(an)        ;20    nxttop→pointer
  6059.     move.l    (an)+,(an)+        ;20    nxttop→curtop
  6060.     move.l    an,(nxttop-dummy_opm_data,an)    ;16    #dummy_opm_data→nxttop
  6061.   .else
  6062.     lea.l    nxttop,an        ;8
  6063.     move.l    (an)+,(an)+        ;20    nxttop→pointer
  6064.     move.l    an,(nxttop-dummy_opm_data,an)    ;16    #dummy_opm_data→nxttop
  6065.   .endif
  6066.     bra.s    66b            ;10
  6067. 55:    tst.b    (an)            ;8    $00,$00=符号反転せずにバッファ終了
  6068.                     ;    $00,$01=符号反転してバッファ終了
  6069.                     ;    $01~=符号反転
  6070.     beq.s    33b            ;8/10
  6071.     move.l    an,pointer        ;20
  6072. 77:    movea.l    (sp)+,an        ;12
  6073.     .endm
  6074.  
  6075. stereo_left_play    .macro    imm,an
  6076.     move.b    #imm,OPMADR
  6077.     move.l    an,-(sp)        ;12
  6078.     movea.l    pointer,an
  6079.     OPMADR_WAIT
  6080.     move.b    (an)+,OPMDAT        ;20
  6081.     bmi.s    55f            ;8/10
  6082.                     ;left側はpointerを更新しない
  6083. 66:    movea.l    (sp)+,an        ;12
  6084.     .endm
  6085.  
  6086. stereo_left_over    .macro    an
  6087. 55:                    ;left側の負数は符号反転のみ
  6088.     movea.l    (sp)+,an        ;12
  6089.     .endm
  6090.  
  6091. stereo_right_play    .macro    imm,an
  6092.     move.b    #imm,OPMADR
  6093.     move.l    an,-(sp)        ;12
  6094.     movea.l    pointer,an
  6095.     addq.l    #1,an            ;8
  6096.     OPMADR_WAIT
  6097.     move.b    (an)+,OPMDAT        ;20
  6098.     bmi.s    55f            ;8/10
  6099.     move.l    an,pointer        ;20
  6100. 66:    movea.l    (sp)+,an        ;12
  6101.     .endm
  6102.  
  6103. stereo_right_over    .macro    an
  6104. 33:    tst.b    (1,an)
  6105.     beq.s    44f
  6106.   .if CURRENT_TIME
  6107.     lea.l    nxttop,an        ;8
  6108.     move.l    (an)+,(an)        ;20    nxttop→pointer
  6109.     move.l    (an)+,(an)+        ;20    nxttop→curtop
  6110.     move.l    an,(nxttop-dummy_opm_data,an)    ;16    #dummy_opm_data→nxttop
  6111.   .else
  6112.     lea.l    nxttop,an
  6113.     move.l    (an)+,(an)+        ;20    nxttop→pointer
  6114.     move.l    an,(nxttop-dummy_opm_data,an)    ;16    #dummy_opm_data→nxttop
  6115.   .endif
  6116.     bra.s    77f
  6117. 44:
  6118.   .if CURRENT_TIME
  6119.     lea.l    nxttop,an        ;8
  6120.     move.l    (an)+,(an)        ;20    nxttop→pointer
  6121.     move.l    (an)+,(an)+        ;20    nxttop→curtop
  6122.     move.l    an,(nxttop-dummy_opm_data,an)    ;16    #dummy_opm_data→nxttop
  6123.   .else
  6124.     lea.l    nxttop,an
  6125.     move.l    (an)+,(an)+        ;20    nxttop→pointer
  6126.     move.l    an,(nxttop-dummy_opm_data,an)    ;16    #dummy_opm_data→nxttop
  6127.   .endif
  6128.     bra.s    66b
  6129. 55:    tst.b    (an)            ;$00,$00=符号反転せずにバッファ終了
  6130.                     ;$00,$01=符号反転してバッファ終了
  6131.                     ;$01~=符号反転
  6132.     beq.s    33b
  6133.     move.l    an,pointer        ;20
  6134. 77:    movea.l    (sp)+,an        ;12
  6135.     .endm
  6136.  
  6137. ;----------------------------------------------------------------
  6138. ;TIMERD割り込みのエントリの手前に配置するマクロ
  6139. ;    TIMERD割り込みは4バイトアラインメントされたアドレスに配置される.
  6140. KEYON_ENTRY    .macro
  6141.     .align    4,$2048
  6142.     .endm
  6143.  
  6144. MONO_ENTRY    .macro
  6145.     .align    4,$2048
  6146.     .endm
  6147.  
  6148. STEREO_ENTRY    .macro
  6149.     .align    4,$2048
  6150.     .endm
  6151.  
  6152. ;----------------------------------------------------------------
  6153. DELTA_CHECK    .macro
  6154.     move.b    d0,-(sp)
  6155.     move.b    delta_timerc,d0        ;TCDRの目標値
  6156.     sub.b    TCDR,d0
  6157.     bpl.s    22f            ;TCDRが目標値と一致または下回れば次の1/4周期へ
  6158.     move.b    (sp)+,d0
  6159.     .endm
  6160.  
  6161. DELTA_OVER    .macro
  6162. 22:    move.b    (sp)+,d0
  6163.     subi.w    #DELTA_TIMERC,delta_timerc
  6164.     .endm
  6165.  
  6166. ;----------------------------------------------------------------
  6167.   .if TEST_TIMERD=0
  6168. VISUAL    .macro    ch,ex
  6169.     .endm
  6170.   .else
  6171.     .if TEST_TIMERD=1
  6172. VISUAL    .macro    ch,ex
  6173.       .if ch=1
  6174.     move.w    #%00000_00000_00000_0,$00E82200
  6175.       .elif ch=2
  6176.     move.w    #%00000_00000_01111_0,$00E82200
  6177.       .elif ch=3
  6178.     move.w    #%00000_01111_00000_0,$00E82200
  6179.       .elif ch=4
  6180.     move.w    #%00000_01111_01111_0,$00E82200
  6181.       .endif
  6182.     .endm
  6183.     .elif TEST_TIMERD=2
  6184. VISUAL    .macro    ch,ex
  6185.       .if ex=0
  6186.     move.w    #%00000_00000_00000_0,$00E82200
  6187.       .elif ex=1    ;0待ち
  6188.     move.w    #%00000_00000_00111_0,$00E82200
  6189.       .elif ex=2    ;leftのみオーバー
  6190.     move.w    #%11111_00000_11111_0,$00E82200
  6191.       .elif ex=3    ;left/rightともオーバー
  6192.     move.w    #%11111_11111_00000_0,$00E82200
  6193.       .elif ex=4    ;rightのみオーバー
  6194.     move.w    #%11111_11111_11111_0,$00E82200
  6195.       .endif
  6196.     .endm
  6197.     .endif
  6198.   .endif
  6199.  
  6200. ;----------------------------------------------------------------
  6201. ;TIMERD割り込みルーチンの実体
  6202.  
  6203.     SETUP_LIST_START
  6204.  
  6205. ;----------------------------------------------------------------
  6206. ;X68000の場合
  6207.  
  6208. ;割り込みが重くなりすぎたときにキー入力が効かなくならないように,割り込みを禁止しない.
  6209. TIMERD_DI    .macro
  6210.     .endm
  6211.  
  6212. ;X68000ではFM音源レジスタのアクセスにハードウェアでウェイトが入っていないので,
  6213. ;FM音源アドレスレジスタのアクセスとFM音源データレジスタのアクセスの間に
  6214. ;ウェイトを入れる必要がある.
  6215. OPMADR_WAIT    .macro
  6216. @wait:
  6217.     tst.b    OPMDAT
  6218.     bmi    @wait
  6219.     .endm
  6220.  
  6221.     .text
  6222.     .align    4,$2048
  6223. mono_keyon_x68000:
  6224.     mono_body
  6225.  
  6226.     .text
  6227.     .align    4,$2048
  6228. stereo_keyon_x68000:
  6229.     stereo_body
  6230.  
  6231. ;----------------------------------------------------------------
  6232. ;X68030の場合
  6233.  
  6234. TIMERD_DI    .macro
  6235. *****    DI
  6236.     .endm
  6237.  
  6238. ;X68030ではFM音源レジスタのアクセスにハードウェアでウェイトが入っているので,
  6239. ;FM音源アドレスレジスタのアクセスとFM音源データレジスタのアクセスの間に
  6240. ;ウェイトを入れる必要がない.
  6241. OPMADR_WAIT    .macro
  6242.     .endm
  6243.  
  6244.     .text
  6245.     .align    4,$2048
  6246. mono_keyon_x68030:
  6247.     mono_body
  6248.  
  6249.     .text
  6250.     .align    4,$2048
  6251. stereo_keyon_x68030:
  6252.     stereo_body
  6253.  
  6254. ;----------------------------------------------------------------
  6255.  
  6256.     SETUP_LIST_END
  6257.  
  6258. ;----------------------------------------------------------------
  6259. ;TIMERD割り込みルーチンが使用するワークエリア
  6260.     .data
  6261.     .even
  6262. counter:    .ds.w    1
  6263. delta_timerc:    .ds.w    1
  6264.     .align    4
  6265. ;nxttopとpointerとcurtopとdummy_opm_dataは必ずこの順序で連続して配置すること
  6266. nxttop::    .ds.l    1    ;現在のバッファを使い終わった後に使うバッファの先頭
  6267. pointer:    .ds.l    1    ;バッファ内の次のOPMデータを指すポインタ
  6268.   .if CURRENT_TIME
  6269. curtop:        .ds.l    1    ;現在再生中のバッファの先頭
  6270.   .endif
  6271. dummy_opm_data:    .dc.b    0,0,0,0    ;ダミーデータはモノラル用とステレオ用で分けるため,
  6272.                 ;再生開始直前に設定する
  6273.  
  6274.